Mercurial > vim
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