aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/search.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/search.c')
-rw-r--r--src/nvim/search.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c
index a5c18bd03a..2a248a53e7 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -286,6 +286,8 @@ static struct spat saved_last_search_spat;
static int did_save_last_search_spat = 0;
static int saved_last_idx = 0;
static bool saved_no_hlsearch = false;
+static colnr_T saved_search_match_endcol;
+static linenr_T saved_search_match_lines;
/// Save and restore the search pattern for incremental highlight search
/// feature.
@@ -328,6 +330,21 @@ void restore_last_search_pattern(void)
set_no_hlsearch(saved_no_hlsearch);
}
+/// Save and restore the incsearch highlighting variables.
+/// This is required so that calling searchcount() at does not invalidate the
+/// incsearch highlighting.
+static void save_incsearch_state(void)
+{
+ saved_search_match_endcol = search_match_endcol;
+ saved_search_match_lines = search_match_lines;
+}
+
+static void restore_incsearch_state(void)
+{
+ search_match_endcol = saved_search_match_endcol;
+ search_match_lines = saved_search_match_lines;
+}
+
char_u *last_search_pattern(void)
{
return spats[RE_SEARCH].pat;
@@ -4717,6 +4734,7 @@ void f_searchcount(typval_T *argvars, typval_T *rettv, FunPtr fptr)
}
save_last_search_pattern();
+ save_incsearch_state();
if (pattern != NULL) {
if (*pattern == NUL) {
goto the_end;
@@ -4738,6 +4756,7 @@ void f_searchcount(typval_T *argvars, typval_T *rettv, FunPtr fptr)
the_end:
restore_last_search_pattern();
+ restore_incsearch_state();
}
/// Fuzzy string matching