mirror of
https://github.com/neovim/neovim.git
synced 2025-09-26 21:18:34 +00:00
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.
fbd0b0af68
This commit is contained in:
@@ -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++;
|
||||
|
Reference in New Issue
Block a user