diff options
author | Billy Su <g4691821@gmail.com> | 2019-03-07 13:08:15 +0800 |
---|---|---|
committer | Billy Su <g4691821@gmail.com> | 2019-03-07 23:27:19 +0800 |
commit | 241b905b1378c5c45d8d284bb191b16807ff2a44 (patch) | |
tree | ce1726447334ae05c894b1b7bd59718058a12a32 /src/nvim/ex_cmds.c | |
parent | 5f84b1dc4154ea8def87b6113fa9b9ed058d83d2 (diff) | |
download | rneovim-241b905b1378c5c45d8d284bb191b16807ff2a44.tar.gz rneovim-241b905b1378c5c45d8d284bb191b16807ff2a44.tar.bz2 rneovim-241b905b1378c5c45d8d284bb191b16807ff2a44.zip |
vim-patch:8.0.0643: when a pattern search is slow Vim becomes unusable
Problem: When 'hlsearch' is set and matching with the last search pattern
is very slow, Vim becomes unusable. Cannot quit search by
pressing CTRL-C.
Solution: When the search times out set a flag and don't try again. Check
for timeout and CTRL-C in NFA loop that adds states.
https://github.com/vim/vim/commit/fbd0b0af6800f6ff89857863d6a07ea03f09ff6c
Diffstat (limited to 'src/nvim/ex_cmds.c')
-rw-r--r-- | src/nvim/ex_cmds.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 2a5793f0d4..4356767cc9 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -3432,7 +3432,7 @@ static buf_T *do_sub(exarg_T *eap, proftime_T timeout, || lnum <= curwin->w_botline); lnum++) { long nmatch = vim_regexec_multi(®match, curwin, curbuf, lnum, - (colnr_T)0, NULL); + (colnr_T)0, NULL, NULL); if (nmatch) { colnr_T copycol; colnr_T matchcol; @@ -3951,8 +3951,8 @@ skip: if (lastone || nmatch_tl > 0 || (nmatch = vim_regexec_multi(®match, curwin, - curbuf, sub_firstlnum, - matchcol, NULL)) == 0 + curbuf, sub_firstlnum, + matchcol, NULL, NULL)) == 0 || regmatch.startpos[0].lnum > 0) { if (new_start != NULL) { /* @@ -4016,7 +4016,7 @@ skip: } if (nmatch == -1 && !lastone) nmatch = vim_regexec_multi(®match, curwin, curbuf, - sub_firstlnum, matchcol, NULL); + sub_firstlnum, matchcol, NULL, NULL); /* * 5. break if there isn't another match in this line @@ -4314,7 +4314,7 @@ void ex_global(exarg_T *eap) if (global_busy) { lnum = curwin->w_cursor.lnum; match = vim_regexec_multi(®match, curwin, curbuf, lnum, - (colnr_T)0, NULL); + (colnr_T)0, NULL, NULL); if ((type == 'g' && match) || (type == 'v' && !match)) { global_exe_one(cmd, lnum); } @@ -4323,7 +4323,7 @@ void ex_global(exarg_T *eap) for (lnum = eap->line1; lnum <= eap->line2 && !got_int; lnum++) { // a match on this line? match = vim_regexec_multi(®match, curwin, curbuf, lnum, - (colnr_T)0, NULL); + (colnr_T)0, NULL, NULL); if ((type == 'g' && match) || (type == 'v' && !match)) { ml_setmarked(lnum); ndone++; |