patch 9.1.0733: keyword completion does not work with fuzzy Commit: https://github.com/vim/vim/commit/7cfe693f9bfa74690867e4d96c25f2205d0d13e4 Author: glepnir <glephun...@gmail.com> Date: Sun Sep 15 20:06:28 2024 +0200
patch 9.1.0733: keyword completion does not work with fuzzy Problem: keyword completion does not work with fuzzy (egesip) Solution: handle ctrl_x_mode_normal() specifically (glepnir) fixes: #15412 closes: #15424 Signed-off-by: glepnir <glephun...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/insexpand.c b/src/insexpand.c index d424fff00..63bf0700d 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -5198,6 +5198,7 @@ ins_compl_start(void) if (line_invalid) line = ml_get(curwin->w_cursor.lnum); + int in_fuzzy = get_cot_flags() & COT_FUZZY; if (compl_status_adding()) { edit_submode_pre = (char_u *)_(" Adding"); @@ -5214,6 +5215,11 @@ ins_compl_start(void) compl_length = 0; compl_col = curwin->w_cursor.col; } + else if (ctrl_x_mode_normal() && in_fuzzy) + { + compl_startpos = curwin->w_cursor; + compl_cont_status &= CONT_S_IPOS; + } } else { diff --git a/src/search.c b/src/search.c index a7fd44e68..661bcc7a5 100644 --- a/src/search.c +++ b/src/search.c @@ -5219,6 +5219,8 @@ search_for_fuzzy_match( pos_T circly_end; int found_new_match = FALSE; int looped_around = FALSE; + char_u *next_word_end = NULL; + char_u *match_word = NULL; if (whole_line) current_pos.lnum += dir; @@ -5254,6 +5256,35 @@ search_for_fuzzy_match( found_new_match = fuzzy_match_str_in_line(ptr, pattern, len, ¤t_pos); if (found_new_match) { + if (ctrl_x_mode_normal()) + { + match_word = vim_strnsave(*ptr, *len); + if (STRCMP(match_word, pattern) == 0) + { + next_word_end = find_word_start(*ptr + *len); + if (*next_word_end != NUL && *next_word_end != NL) + { + // Find end of the word. + if (has_mbyte) + while (*next_word_end != NUL) + { + int l = (*mb_ptr2len)(next_word_end); + + if (l < 2 && !vim_iswordc(*next_word_end)) + break; + next_word_end += l; + } + else + next_word_end = find_word_end(next_word_end); + } + else if (looped_around) + found_new_match = FALSE; + + *len = next_word_end - *ptr; + current_pos.col = *len; + } + vim_free(match_word); + } *pos = current_pos; break; } diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index aee33936f..df254847e 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -2654,10 +2654,38 @@ func Test_complete_fuzzy_match() call feedkeys("Su\<C-X>\<C-L>\<C-P>\<Esc>0", 'tx!') call assert_equal('no one can save me but you', getline('.')) + " issue #15412 + call setline(1, ['alpha bravio charlie']) + call feedkeys("Salpha\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha bravio', getline('.')) + call feedkeys("Salp\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha', getline('.')) + call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha bravio', getline('.')) + call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha bravio charlie', getline('.')) + + set complete-=i + call feedkeys("Salp\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha', getline('.')) + call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha bravio', getline('.')) + call feedkeys("A\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha bravio charlie', getline('.')) + + call setline(1, ['alpha bravio charlie', 'alpha another']) + call feedkeys("Salpha\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!') + call assert_equal('alpha another', getline('.')) + call setline(1, ['你好 我好', '你好 他好']) + call feedkeys("S你好\<C-X>\<C-N>\<Esc>0", 'tx!') + call assert_equal('你好 我好', getline('.')) + call feedkeys("S你好\<C-X>\<C-N>\<C-N>\<Esc>0", 'tx!') + call assert_equal('你好 他好', getline('.')) + " issue #15526 set completeopt=fuzzy,menuone,menu,noselect call setline(1, ['Text', 'ToText', '']) - call cursor(2, 1) + call cursor(3, 1) call feedkeys("STe\<C-X>\<C-N>x\<CR>\<Esc>0", 'tx!') call assert_equal('Tex', getline('.')) diff --git a/src/version.c b/src/version.c index 6138f5152..f5bd1433c 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 733, /**/ 732, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/E1sptm4-001B1O-71%40256bit.org.