# HG changeset patch # User Christian Brabandt # Date 1534972506 -7200 # Node ID 3f9b73cc8adb70c05ae3b3f5a10c90f62ae0cbbf # Parent de8371a98affb281323dfb8433dccaff58fc9ec5 patch 8.1.0320: too much 'incsearch' highlight for pat matching everything commit https://github.com/vim/vim/commit/8b0d5ce881ac16a36ea00018ba13a58b0fdb7534 Author: Bram Moolenaar 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. diff --git a/src/ex_getln.c b/src/ex_getln.c --- 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) diff --git a/src/testdir/dumps/Test_incsearch_substitute_09.dump b/src/testdir/dumps/Test_incsearch_substitute_09.dump 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 diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim --- 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, "\") + " Only \v handled as empty pattern, does not move cursor + call term_sendkeys(buf, '3G4G') + call term_sendkeys(buf, ":nohlsearch\") + call term_sendkeys(buf, ':6,7s/\v') + sleep 100m + call VerifyScreenDump(buf, 'Test_incsearch_substitute_09', {}) + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) call delete('Xis_subst_script') endfunc diff --git a/src/version.c b/src/version.c --- 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,