From: Girish Palya Date: Thu, 27 Nov 2025 20:20:38 +0000 (+0000) Subject: patch 9.1.1931: completion: wrong item selected with fuzzy and noinsert X-Git-Tag: v9.1.1931^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=057ea1232a4b5402616705d698a9edfde94d490b;p=thirdparty%2Fvim.git patch 9.1.1931: completion: wrong item selected with fuzzy and noinsert Problem: completion: wrong item selected with fuzzy and noinsert (Evgeni Chasnovski) Solution: Reset selected item after fuzzy sort (Girish Palya) fixes: #18802 closes: #18816 Signed-off-by: Girish Palya Signed-off-by: Christian Brabandt --- diff --git a/src/insexpand.c b/src/insexpand.c index ea4ce495bf..1bcadadf83 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -2480,18 +2480,20 @@ ins_compl_fuzzy_sort(void) { int cur_cot_flags = get_cot_flags(); - // set the fuzzy score in cp_score + // Set the fuzzy score in cp_score and sort set_fuzzy_score(); - // Sort the matches linked list based on fuzzy score if (!(cur_cot_flags & COT_NOSORT)) { sort_compl_match_list(cp_compare_fuzzy); - if ((cur_cot_flags & (COT_NOINSERT | COT_NOSELECT)) == COT_NOINSERT - && compl_first_match) - { - compl_shown_match = compl_first_match; - if (compl_shows_dir_forward() && !compl_autocomplete) - compl_shown_match = compl_first_match->cp_next; + // Reset the shown item since sorting reorders items + if ((cur_cot_flags & (COT_NOINSERT | COT_NOSELECT)) == COT_NOINSERT) + { + int none_selected = compl_shown_match == (compl_shows_dir_forward() + ? compl_first_match : compl_first_match->cp_prev); + if (!none_selected) + compl_shown_match + = (!compl_autocomplete && compl_shows_dir_forward()) + ? compl_first_match->cp_next : compl_first_match; } } } diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index c2268682fd..194422b34a 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -3593,6 +3593,15 @@ func Test_complete_opt_fuzzy() call feedkeys("Gof\\=PrintMenuWords()\\0", 'tx') call assert_equal('f{''items'': [''func1'', ''func2'', ''xfunc'']}', getline('.')) + " Issue #18802: Reset selected item after fuzzy sort + %d + call setline(1, ['aa', 'aaa', 'aaaa']) + set completeopt=menuone,noinsert,fuzzy + call feedkeys("Goa\\\", 'tx') + call assert_equal('aa', getline('.')) + call feedkeys("Goa\\\", 'tx') + call assert_equal('aaaa', getline('.')) + " clean up set omnifunc= bw! diff --git a/src/version.c b/src/version.c index e2619a3397..75095d126d 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1931, /**/ 1930, /**/