vim-patch:8.2.4724: current instance of last search pattern not easily spotted

Problem:    Current instance of last search pattern not easily spotted.
Solution:   Add CurSearch highlighting. (closes vim/vim#10133)

a43993897a

Some code is superseded by later patches that are already ported.

Co-authored-by: LemonBoy <thatlemon@gmail.com>
This commit is contained in:
zeertzjq
2024-06-19 07:32:53 +08:00
parent a2d510e101
commit 14aba67967
6 changed files with 19 additions and 15 deletions

View File

@@ -47,6 +47,8 @@ EDITOR
• The order in which signs are placed was changed. Higher priority signs will • The order in which signs are placed was changed. Higher priority signs will
now appear left of lower priority signs. now appear left of lower priority signs.
• |hl-CurSearch| now behaves the same as Vim and no longer updates on every
cursor movement.
EVENTS EVENTS

View File

@@ -4969,8 +4969,9 @@ ColorColumn Used for the columns set with 'colorcolumn'.
Conceal Placeholder characters substituted for concealed Conceal Placeholder characters substituted for concealed
text (see 'conceallevel'). text (see 'conceallevel').
*hl-CurSearch* *hl-CurSearch*
CurSearch Used for highlighting a search pattern under the cursor CurSearch Current match for the last search pattern (see 'hlsearch').
(see 'hlsearch'). Note: This is correct after a search, but may get outdated if
changes are made or the screen is redrawn.
*hl-Cursor* *hl-lCursor* *hl-Cursor* *hl-lCursor*
Cursor Character under the cursor. Cursor Character under the cursor.
lCursor Character under the cursor when |language-mapping| lCursor Character under the cursor when |language-mapping|

View File

@@ -539,8 +539,6 @@ Functions:
Highlight groups: Highlight groups:
- |hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other - |hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other
groups groups
- |hl-CurSearch| highlights match under cursor instead of last match found
using |n| or |N|
- |hl-CursorLine| is low-priority unless foreground color is set - |hl-CursorLine| is low-priority unless foreground color is set
- |hl-VertSplit| superseded by |hl-WinSeparator| - |hl-VertSplit| superseded by |hl-WinSeparator|
- Highlight groups names are allowed to contain `@` characters. - Highlight groups names are allowed to contain `@` characters.

View File

@@ -153,7 +153,6 @@ static void redraw_for_cursorline(win_T *wp)
/// Redraw when w_virtcol changes and /// Redraw when w_virtcol changes and
/// - 'cursorcolumn' is set, or /// - 'cursorcolumn' is set, or
/// - 'cursorlineopt' contains "screenline", or /// - 'cursorlineopt' contains "screenline", or
/// - "CurSearch" highlight is in use, or
/// - 'concealcursor' is active, or /// - 'concealcursor' is active, or
/// - Visual mode is active. /// - Visual mode is active.
static void redraw_for_cursorcolumn(win_T *wp) static void redraw_for_cursorcolumn(win_T *wp)
@@ -173,10 +172,8 @@ static void redraw_for_cursorcolumn(win_T *wp)
return; return;
} }
if (wp->w_p_cuc if (wp->w_p_cuc) {
|| (win_hl_attr(wp, HLF_LC) != win_hl_attr(wp, HLF_L) && using_hlsearch())) { // When 'cursorcolumn' is set need to redraw with UPD_SOME_VALID.
// When 'cursorcolumn' is set or "CurSearch" is in use
// need to redraw with UPD_SOME_VALID.
redraw_later(wp, UPD_SOME_VALID); redraw_later(wp, UPD_SOME_VALID);
} else if (wp->w_p_cul && (wp->w_p_culopt_flags & CULOPT_SCRLINE)) { } else if (wp->w_p_cul && (wp->w_p_culopt_flags & CULOPT_SCRLINE)) {
// When 'cursorlineopt' contains "screenline" need to redraw with UPD_VALID. // When 'cursorlineopt' contains "screenline" need to redraw with UPD_VALID.

View File

@@ -3973,6 +3973,12 @@ static void nv_next(cmdarg_T *cap)
normal_search(cap, 0, NULL, 0, SEARCH_MARK | cap->arg, NULL); normal_search(cap, 0, NULL, 0, SEARCH_MARK | cap->arg, NULL);
cap->count1 -= 1; cap->count1 -= 1;
} }
// Redraw the window to refresh the highlighted matches.
if (i > 0 && p_hls && !no_hlsearch
&& win_hl_attr(curwin, HLF_LC) != win_hl_attr(curwin, HLF_L)) {
redraw_later(curwin, UPD_SOME_VALID);
}
} }
/// Search for "pat" in direction "dir" ('/' or '?', 0 for repeat). /// Search for "pat" in direction "dir" ('/' or '?', 0 for repeat).
@@ -3984,6 +3990,7 @@ static void nv_next(cmdarg_T *cap)
static int normal_search(cmdarg_T *cap, int dir, char *pat, size_t patlen, int opt, int *wrapped) static int normal_search(cmdarg_T *cap, int dir, char *pat, size_t patlen, int opt, int *wrapped)
{ {
searchit_arg_T sia; searchit_arg_T sia;
pos_T const prev_cursor = curwin->w_cursor;
cap->oap->motion_type = kMTCharWise; cap->oap->motion_type = kMTCharWise;
cap->oap->inclusive = false; cap->oap->inclusive = false;
@@ -4007,6 +4014,11 @@ static int normal_search(cmdarg_T *cap, int dir, char *pat, size_t patlen, int o
foldOpenCursor(); foldOpenCursor();
} }
} }
// Redraw the window to refresh the highlighted matches.
if (!equalpos(curwin->w_cursor, prev_cursor) && p_hls && !no_hlsearch
&& win_hl_attr(curwin, HLF_LC) != win_hl_attr(curwin, HLF_L)) {
redraw_later(curwin, UPD_SOME_VALID);
}
// "/$" will put the cursor after the end of the line, may need to // "/$" will put the cursor after the end of the line, may need to
// correct that here // correct that here

View File

@@ -4322,9 +4322,3 @@ bool search_was_last_used(void)
{ {
return last_idx == 0; return last_idx == 0;
} }
/// @return true if 'hlsearch' highlight is currently in use.
bool using_hlsearch(void)
{
return spats[last_idx].pat != NULL && p_hls && !no_hlsearch;
}