diff options
Diffstat (limited to 'src/nvim/ex_getln.c')
-rw-r--r-- | src/nvim/ex_getln.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 75be441edc..241e8a9a89 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -286,6 +286,7 @@ static bool do_incsearch_highlighting(int firstc, incsearch_state_T *s, char_u *dummy; exarg_T ea; pos_T save_cursor; + bool use_last_pat; *skiplen = 0; *patlen = ccline.cmdlen; @@ -365,11 +366,25 @@ static bool do_incsearch_highlighting(int firstc, incsearch_state_T *s, 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; } - // found a non-empty pattern or // + // Don't do 'hlsearch' highlighting if the pattern matches everything. + if (!use_last_pat) { + char_u 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); @@ -505,17 +520,6 @@ static void may_do_incsearch_highlighting(int firstc, long count, 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) { |