diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-09-17 10:47:17 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-17 10:47:17 -0400 |
commit | d56002f7b722facd97b0958e141c8ed2d01495f7 (patch) | |
tree | 46e0a3bc02ba86b08e5dbf0cfeae7e615fae5b21 /src/nvim/edit.c | |
parent | 867e8885991ae450019c18aa5e42546bd4b62c2c (diff) | |
parent | 1e0d563967d139dfe5f42993c90f888c5a48c634 (diff) | |
download | rneovim-d56002f7b722facd97b0958e141c8ed2d01495f7.tar.gz rneovim-d56002f7b722facd97b0958e141c8ed2d01495f7.tar.bz2 rneovim-d56002f7b722facd97b0958e141c8ed2d01495f7.zip |
Merge pull request #15364 from seandewar/vim-8.2.3337
vim-patch:8.2.{3286,3289,3293,3298,3313,3321,3328,3330,3331,3337,3354,3355,3357,3360,3369,3375}
Diffstat (limited to 'src/nvim/edit.c')
-rw-r--r-- | src/nvim/edit.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 3c4bf504cf..aeab1cdad4 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -4127,6 +4127,7 @@ static int ins_compl_get_exp(pos_T *ini) char_u *dict = NULL; int dict_f = 0; bool set_match_pos; + pos_T prev_pos = { 0, 0, 0 }; int l_ctrl_x_mode = ctrl_x_mode; assert(curbuf != NULL); @@ -4365,6 +4366,7 @@ static int ins_compl_get_exp(pos_T *ini) } else if (*e_cpt == '.') { p_ws = true; } + bool looped_around = false; for (;; ) { bool cont_s_ipos = false; @@ -4393,7 +4395,26 @@ static int ins_compl_get_exp(pos_T *ini) } else if (first_match_pos.lnum == last_match_pos.lnum && first_match_pos.col == last_match_pos.col) { found_new_match = FAIL; + } else if ((compl_direction == FORWARD) + && (prev_pos.lnum > pos->lnum + || (prev_pos.lnum == pos->lnum + && prev_pos.col >= pos->col))) { + if (looped_around) { + found_new_match = FAIL; + } else { + looped_around = true; + } + } else if ((compl_direction != FORWARD) + && (prev_pos.lnum < pos->lnum + || (prev_pos.lnum == pos->lnum + && prev_pos.col <= pos->col))) { + if (looped_around) { + found_new_match = FAIL; + } else { + looped_around = true; + } } + prev_pos = *pos; if (found_new_match == FAIL) { if (ins_buf == curbuf) { found_all = true; |