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