diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-06-17 18:44:21 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-06-17 18:44:21 +0200 |
commit | fbd0b0af6800f6ff89857863d6a07ea03f09ff6c (patch) | |
tree | d970232ff584511e30efcfe2f7ea5eefb9e9f8d4 /src/ex_cmds.c | |
parent | 8cf91286ca46a501d24e4b7d631b193256782c88 (diff) | |
download | vim-git-fbd0b0af6800f6ff89857863d6a07ea03f09ff6c.tar.gz |
patch 8.0.0643: when a pattern search is slow Vim becomes unusablev8.0.0643
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.
Diffstat (limited to 'src/ex_cmds.c')
-rw-r--r-- | src/ex_cmds.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 859b8c65b..59531bea0 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -5096,7 +5096,7 @@ do_sub(exarg_T *eap) ); ++lnum) { nmatch = vim_regexec_multi(®match, curwin, curbuf, lnum, - (colnr_T)0, NULL); + (colnr_T)0, NULL, NULL); if (nmatch) { colnr_T copycol; @@ -5695,7 +5695,7 @@ skip: || nmatch_tl > 0 || (nmatch = vim_regexec_multi(®match, curwin, curbuf, sub_firstlnum, - matchcol, NULL)) == 0 + matchcol, NULL, NULL)) == 0 || regmatch.startpos[0].lnum > 0) { if (new_start != NULL) @@ -5760,7 +5760,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 @@ -6012,7 +6012,7 @@ ex_global(exarg_T *eap) { 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); } @@ -6025,7 +6025,7 @@ ex_global(exarg_T *eap) { /* 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); |