diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index 0453b6f70d..c5991dc4ff 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -1,4 +1,4 @@ -*insert.txt* For Vim version 9.1. Last change: 2025 Sep 11 +*insert.txt* For Vim version 9.1. Last change: 2025 Sep 15 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1437,6 +1437,8 @@ In the first state these keys have a special meaning: and CTRL-H Delete one character, find the matches for the word before the cursor. This reduces the list of matches, often to one entry, and switches to the second state. + When 'autocomplete' is set, clears the selected item in the + menu. Any non-special character: Stop completion without changing the match and insert the typed character. @@ -1444,6 +1446,8 @@ Any non-special character: In the second and third state these keys have a special meaning: and CTRL-H Delete one character, find the matches for the shorter word before the cursor. This may find more matches. + When 'autocomplete' is set, clears the selected item in the + menu. CTRL-L Add one character from the current match, may reduce the number of matches. any printable, non-white character: diff --git a/src/insexpand.c b/src/insexpand.c index dac3698cf7..c92ebf540e 100644 --- a/src/insexpand.c +++ b/src/insexpand.c @@ -2424,6 +2424,10 @@ ins_compl_bs(void) return K_BS; } + // Clear selection if a menu item is currently selected in autocompletion + if (compl_autocomplete && compl_first_match) + compl_shown_match = compl_first_match; + ins_compl_new_leader(); if (compl_shown_match != NULL) // Make sure current match is not a hidden item. diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim index a5e7a8b81c..559ffbe8b1 100644 --- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -5247,6 +5247,21 @@ func Test_autocomplete_trigger() call feedkeys("Sazx\\\\0", 'tx!') call assert_equal(['and', 'afoo'], b:matches->mapnew('v:val.word')) + " Test 6: should clear the selected item + %d + call setline(1, ["foobarfoo", "foobar", "foobarbaz"]) + call feedkeys("Gofo\\\\\0", 'tx!') + call assert_equal(['foobarbaz', 'foobar', 'foobarfoo'], b:matches->mapnew('v:val.word')) + call assert_equal(1, b:selected) + call feedkeys("Sfo\\\\\\0", 'tx!') + call assert_equal(['foobarbaz', 'foobar', 'foobarfoo'], b:matches->mapnew('v:val.word')) + call assert_equal(-1, b:selected) + call assert_equal('fooba', getline(4)) + call feedkeys("Sfo\\\\\\\0", 'tx!') + call assert_equal(['foobarbaz', 'foobar', 'foobarfoo'], b:matches->mapnew('v:val.word')) + call assert_equal(0, b:selected) + call assert_equal('foobarbaz', getline(4)) + bw! call test_override("char_avail", 0) delfunc NonKeywordComplete diff --git a/src/version.c b/src/version.c index 96a41c2d77..9e722ac3ff 100644 --- a/src/version.c +++ b/src/version.c @@ -724,6 +724,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1762, /**/ 1761, /**/