Mercurial > vim
comparison src/normal.c @ 11521:578df034735d v8.0.0643
patch 8.0.0643: when a pattern search is slow Vim becomes unusable
commit https://github.com/vim/vim/commit/fbd0b0af6800f6ff89857863d6a07ea03f09ff6c
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jun 17 18:44:21 2017 +0200
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 17 Jun 2017 18:45:04 +0200 |
parents | be76f4eca0d7 |
children | 998d2cf59caa |
comparison
equal
deleted
inserted
replaced
11520:8b54fc8a4b2e | 11521:578df034735d |
---|---|
4356 CLEAR_POS(&found_pos); | 4356 CLEAR_POS(&found_pos); |
4357 for (;;) | 4357 for (;;) |
4358 { | 4358 { |
4359 valid = FALSE; | 4359 valid = FALSE; |
4360 t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD, | 4360 t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD, |
4361 pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL); | 4361 pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL, NULL); |
4362 if (curwin->w_cursor.lnum >= old_pos.lnum) | 4362 if (curwin->w_cursor.lnum >= old_pos.lnum) |
4363 t = FAIL; /* match after start is failure too */ | 4363 t = FAIL; /* match after start is failure too */ |
4364 | 4364 |
4365 if (thisblock && t != FAIL) | 4365 if (thisblock && t != FAIL) |
4366 { | 4366 { |
6378 cap->oap->inclusive = FALSE; | 6378 cap->oap->inclusive = FALSE; |
6379 cap->oap->use_reg_one = TRUE; | 6379 cap->oap->use_reg_one = TRUE; |
6380 curwin->w_set_curswant = TRUE; | 6380 curwin->w_set_curswant = TRUE; |
6381 | 6381 |
6382 i = do_search(cap->oap, dir, pat, cap->count1, | 6382 i = do_search(cap->oap, dir, pat, cap->count1, |
6383 opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG, NULL); | 6383 opt | SEARCH_OPT | SEARCH_ECHO | SEARCH_MSG, NULL, NULL); |
6384 if (i == 0) | 6384 if (i == 0) |
6385 clearop(cap->oap); | 6385 clearop(cap->oap); |
6386 else | 6386 else |
6387 { | 6387 { |
6388 if (i == 2) | 6388 if (i == 2) |