From: glepnir Date: Thu, 17 Apr 2025 18:17:53 +0000 (+0200) Subject: patch 9.1.1315: completion: issue with fuzzy completion and 'completefuzzycollect' X-Git-Tag: v9.1.1315^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cfe502c5753cce2080ddabdfdcacb8e4b3092721;p=thirdparty%2Fvim.git patch 9.1.1315: completion: issue with fuzzy completion and 'completefuzzycollect' Problem: chain complete does not work when 'cot' includes fuzzy and 'completefuzzycollect' collects wrong next word. (Konfekt) Solution: compl_startpos is not set correctly, remove next word check in search_for_fuzzy_match (glepnir). fixes #17131 fixes #16942 closes: #17136 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- diff --git a/src/insexpand.c b/src/insexpand.c index 8673e74551..233586277e 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -6101,7 +6101,6 @@ 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"); @@ -6119,7 +6118,7 @@ ins_compl_start(void) compl_col = curwin->w_cursor.col; compl_lnum = curwin->w_cursor.lnum; } - else if (ctrl_x_mode_normal() && in_fuzzy) + else if (ctrl_x_mode_normal() && cfc_has_mode()) { compl_startpos = curwin->w_cursor; compl_cont_status &= CONT_S_IPOS; diff --git a/src/search.c b/src/search.c index abd74416d6..68b2e727ba 100644 --- a/src/search.c +++ b/src/search.c @@ -5370,30 +5370,6 @@ search_for_fuzzy_match( len, ¤t_pos, score); if (found_new_match) { - if (ctrl_x_mode_normal()) - { - if (STRNCMP(*ptr, pattern, *len) == 0 && pattern[*len] == NUL) - { - char_u *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); - } - - *len = next_word_end - *ptr; - } - } *pos = current_pos; break; } diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index 2b14bfa760..916ad19fbc 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -3480,6 +3480,14 @@ func Test_complete_opt_fuzzy() call feedkeys("Sb\\\\\", 'tx') call assert_equal('b', getline('.')) + " chain completion + call feedkeys("Slore spum\lor\\\\\", 'tx') + call assert_equal('lore spum', getline('.')) + + " issue #15412 + call feedkeys("Salpha bravio charlie\alpha\\\\\\\", 'tx') + call assert_equal('alpha bravio charlie', getline('.')) + " clean up set omnifunc= bw! @@ -3565,34 +3573,6 @@ func Test_complete_fuzzy_collect() call feedkeys("Su\\\\0", 'tx!') call assert_equal('no one can save me but you', getline('.')) - " issue #15412 - call setline(1, ['alpha bravio charlie']) - call feedkeys("Salpha\\\0", 'tx!') - call assert_equal('alpha bravio', getline('.')) - call feedkeys("Salp\\\0", 'tx!') - call assert_equal('alpha', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio charlie', getline('.')) - - set complete-=i - call feedkeys("Salp\\\0", 'tx!') - call assert_equal('alpha', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio', getline('.')) - call feedkeys("A\\\0", 'tx!') - call assert_equal('alpha bravio charlie', getline('.')) - - call setline(1, ['alpha bravio charlie', 'alpha another']) - call feedkeys("Salpha\\\\0", 'tx!') - call assert_equal('alpha another', getline('.')) - call setline(1, ['你好 我好', '你好 他好']) - call feedkeys("S你好\\\0", 'tx!') - call assert_equal('你好 我好', getline('.')) - call feedkeys("S你好\\\\0", 'tx!') - call assert_equal('你好 他好', getline('.')) - " issue #15526 set completeopt=menuone,menu,noselect call setline(1, ['Text', 'ToText', '']) @@ -3618,6 +3598,11 @@ func Test_complete_fuzzy_collect() call feedkeys("Gofuzzy\\\\\\0", 'tx!') call assert_equal('completefuzzycollect', getline('.')) + execute('%d _') + call setline(1, ['fuzzy', 'fuzzy foo', "fuzzy bar", 'fuzzycollect']) + call feedkeys("Gofuzzy\\\\\\0", 'tx!') + call assert_equal('fuzzycollect', getline('.')) + bw! bw! set dict& diff --git a/src/version.c b/src/version.c index 5ced0fefdd..9a1926004c 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 */ +/**/ + 1315, /**/ 1314, /**/