diff src/ex_getln.c @ 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 5e038972cafa
children c6b41d47bac1
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)