changeset 14613:3f9b73cc8adb v8.1.0320

patch 8.1.0320: too much 'incsearch' highlight for pat matching everything commit https://github.com/vim/vim/commit/8b0d5ce881ac16a36ea00018ba13a58b0fdb7534 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 22 23:05:44 2018 +0200 patch 8.1.0320: too much 'incsearch' highlight for pat matching everything Problem: Too much 'incsearch' highlight for pattern matching everything. Solution: Add the skiplen to the command and remove the line range. (Christian Brabandt) Check for empty pattern earlier.
author Christian Brabandt <cb@256bit.org>
date Wed, 22 Aug 2018 23:15:06 +0200
parents de8371a98aff
children 52accd9173cb
files src/ex_getln.c src/testdir/dumps/Test_incsearch_substitute_09.dump src/testdir/test_search.vim src/version.c
diffstat 4 files changed, 37 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -285,6 +285,7 @@ do_incsearch_highlighting(int firstc, in
     char_u	*dummy;
     exarg_T	ea;
     pos_T	save_cursor;
+    int		use_last_pat;
 
     *skiplen = 0;
     *patlen = ccline.cmdlen;
@@ -361,10 +362,25 @@ do_incsearch_highlighting(int firstc, in
     delim = (delim_optional && vim_isIDc(*p)) ? ' ' : *p++;
     end = skip_regexp(p, delim, p_magic, NULL);
 
-    if (end == p && *end != delim)
+    use_last_pat = end == p && *end == delim;
+
+    if (end == p && !use_last_pat)
 	return FALSE;
+
+    // Don't do 'hlsearch' highlighting if the pattern matches everything.
+    if (!use_last_pat)
+    {
+	char c = *end;
+	int  empty;
+
+	*end = NUL;
+	empty = empty_pattern(p);
+	*end = c;
+	if (empty)
+	    return FALSE;
+    }
+
     // found a non-empty pattern or //
-
     *skiplen = (int)(p - ccline.cmdbuff);
     *patlen = (int)(end - p);
 
@@ -556,17 +572,6 @@ may_do_incsearch_highlighting(
     else
 	end_pos = curwin->w_cursor; // shutup gcc 4
 
-    // Disable 'hlsearch' highlighting if the pattern matches everything.
-    // Avoids a flash when typing "foo\|".
-    if (!use_last_pat)
-    {
-	next_char = ccline.cmdbuff[skiplen + patlen];
-	ccline.cmdbuff[skiplen + patlen] = NUL;
-	if (empty_pattern(ccline.cmdbuff))
-	    set_no_hlsearch(TRUE);
-	ccline.cmdbuff[skiplen + patlen] = next_char;
-    }
-
     validate_cursor();
     // May redraw the status line to show the cursor position.
     if (p_ru && curwin->w_status_height > 0)
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_substitute_09.dump
@@ -0,0 +1,9 @@
+|f+0&#ffffff0|o@1| |3| @64
+|f+8&&|o@1| |4| @64
+|f+0&&|o@1| |5| @64
+|f|o@1| |6| @64
+|f|o@1| |7| @64
+|f|o@1| |8| @64
+|f|o@1| |9| @64
+|f|o@1| |1|0| @63
+|:|6|,|7|s|/|\|v> @61
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -913,6 +913,14 @@ func Test_incsearch_substitute_dump()
   call VerifyScreenDump(buf, 'Test_incsearch_substitute_08', {})
   call term_sendkeys(buf, "\<Esc>")
 
+  " Only \v handled as empty pattern, does not move cursor
+  call term_sendkeys(buf, '3G4G')
+  call term_sendkeys(buf, ":nohlsearch\<CR>")
+  call term_sendkeys(buf, ':6,7s/\v')
+  sleep 100m
+  call VerifyScreenDump(buf, 'Test_incsearch_substitute_09', {})
+  call term_sendkeys(buf, "\<Esc>")
+
   call StopVimInTerminal(buf)
   call delete('Xis_subst_script')
 endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -795,6 +795,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    320,
+/**/
     319,
 /**/
     318,