diff options
author | Bram Moolenaar <Bram@vim.org> | 2014-01-23 22:45:58 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2014-01-23 22:45:58 +0100 |
commit | 361aa50547249b76097da86873f7c981e3918049 (patch) | |
tree | 43f052e913cfd5c403789b283f33f6730d47037e | |
parent | 8af269186c71d6835e563bfaa35fe5c50d10513d (diff) | |
download | vim-git-361aa50547249b76097da86873f7c981e3918049.tar.gz |
updated for version 7.4.159v7.4.159
Problem: Completion hangs when scanning the current buffer after doing
keywords. (Christian Brabandt)
Solution: Set the first match position when starting to scan the current
buffer.
-rw-r--r-- | src/edit.c | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 11 insertions, 2 deletions
diff --git a/src/edit.c b/src/edit.c index 0904af857..29d8d3e65 100644 --- a/src/edit.c +++ b/src/edit.c @@ -4180,6 +4180,7 @@ ins_compl_get_exp(ini) char_u *dict = NULL; int dict_f = 0; compl_T *old_match; + int set_match_pos; if (!compl_started) { @@ -4198,6 +4199,7 @@ ins_compl_get_exp(ini) for (;;) { found_new_match = FAIL; + set_match_pos = FALSE; /* For ^N/^P pick a new entry from e_cpt if compl_started is off, * or if found_all says this entry is done. For ^X^L only use the @@ -4217,6 +4219,10 @@ ins_compl_get_exp(ini) dec(&first_match_pos); last_match_pos = first_match_pos; type = 0; + + /* Remember the first match so that the loop stops when we + * wrap and come back there a second time. */ + set_match_pos = TRUE; } else if (vim_strchr((char_u *)"buwU", *e_cpt) != NULL && (ins_buf = ins_compl_next_buf(ins_buf, *e_cpt)) != curbuf) @@ -4381,7 +4387,7 @@ ins_compl_get_exp(ini) if (ins_buf->b_p_inf) p_scs = FALSE; - /* buffers other than curbuf are scanned from the beginning or the + /* Buffers other than curbuf are scanned from the beginning or the * end but never from the middle, thus setting nowrapscan in this * buffers is a good idea, on the other hand, we always set * wrapscan for curbuf to avoid missing matches -- Acevedo,Webb */ @@ -4408,12 +4414,13 @@ ins_compl_get_exp(ini) compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG, RE_LAST, (linenr_T)0, NULL); --msg_silent; - if (!compl_started) + if (!compl_started || set_match_pos) { /* set "compl_started" even on fail */ compl_started = TRUE; first_match_pos = *pos; last_match_pos = *pos; + set_match_pos = FALSE; } else if (first_match_pos.lnum == last_match_pos.lnum && first_match_pos.col == last_match_pos.col) diff --git a/src/version.c b/src/version.c index 00e1ae6b1..e8bfd9ae9 100644 --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 159, +/**/ 158, /**/ 157, |