Mercurial > vim
diff src/match.c @ 28469:9ff0e5a29037 v8.2.4759
patch 8.2.4759: CurSearch highlight does not work for multi-line match
Commit: https://github.com/vim/vim/commit/693ccd11606b59eb0f81c6c1948679e61ada4022
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Apr 16 12:04:37 2022 +0100
patch 8.2.4759: CurSearch highlight does not work for multi-line match
Problem: CurSearch highlight does not work for multi-line match.
Solution: Check cursor position before adjusting columns. (closes https://github.com/vim/vim/issues/10133)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 16 Apr 2022 13:15:03 +0200 |
parents | d395fadbaf67 |
children | e96111a91a21 |
line wrap: on
line diff
--- a/src/match.c +++ b/src/match.c @@ -396,6 +396,7 @@ next_search_hl_pos( shl->rm.endpos[0].lnum = 0; shl->rm.endpos[0].col = end; shl->is_addpos = TRUE; + shl->has_cursor = FALSE; posmatch->cur = found + 1; return 1; } @@ -655,6 +656,7 @@ prepare_search_hl_line( shl->lines = 0; shl->attr_cur = 0; shl->is_addpos = FALSE; + shl->has_cursor = FALSE; if (cur != NULL) cur->pos.cur = 0; next_search_hl(wp, search_hl, shl, lnum, mincol, @@ -679,6 +681,17 @@ prepare_search_hl_line( shl->lines = shl->rm.endpos[0].lnum - shl->rm.startpos[0].lnum; else shl->lines = 1; + + // check if the cursor is in the match before changing the columns + if (wp->w_cursor.lnum >= shl->lnum + && wp->w_cursor.lnum + <= shl->lnum + shl->rm.endpos[0].lnum + && (wp->w_cursor.lnum > shl->lnum + || wp->w_cursor.col >= shl->rm.startpos[0].col) + && (wp->w_cursor.lnum < shl->lnum + shl->lines + || wp->w_cursor.col < shl->rm.endpos[0].col)) + shl->has_cursor = TRUE; + // Highlight one character for an empty match. if (shl->startcol == shl->endcol) { @@ -775,14 +788,8 @@ update_search_hl( # endif // Highlight the match were the cursor is using the CurSearch // group. - if (shl == search_hl - && wp->w_cursor.lnum >= shl->lnum - && wp->w_cursor.lnum < shl->lnum + shl->lines - && wp->w_cursor.col >= shl->startcol - && wp->w_cursor.col < shl->endcol) - { + if (shl == search_hl && shl->has_cursor) shl->attr_cur = HL_ATTR(HLF_LC); - } } else if (col == shl->endcol)