neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit e2166661d483c283f48aafc2fa5fde08b07f8594
parent 95267b664cc12e3249e1ae7b0670d93ff256abac
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Fri, 19 Sep 2025 10:47:53 +0800

vim-patch:9.1.1772: completion: inconsistent selection of first item with 'autocomplete' (#35835)

Problem:  completion: inconsistent selection of first item with
          'autocomplete' (Tomasz N)
Solution: Check for 'autocomplete' option in ins_compl_new_leader()
          (Girish Palya).

fixes: vim/vim#18326
closes: vim/vim#18329

https://github.com/vim/vim/commit/86e8e909f2e8cc1f851b4b62c3060c86c1afae65

Co-authored-by: Girish Palya <girishji@gmail.com>
Diffstat:
Msrc/nvim/insexpand.c | 2+-
Mtest/functional/editor/completion_spec.lua | 46+++++++++++++++++++++++++++++++++++++++++++++-
Mtest/old/testdir/test_ins_complete.vim | 23+++++++++++++++++++++++
3 files changed, 69 insertions(+), 2 deletions(-)

diff --git a/src/nvim/insexpand.c b/src/nvim/insexpand.c @@ -2274,7 +2274,7 @@ static void ins_compl_new_leader(void) if ((cur_cot_flags & (kOptCotFlagNoinsert|kOptCotFlagNoselect)) == kOptCotFlagNoinsert && compl_first_match) { compl_shown_match = compl_first_match; - if (compl_shows_dir_forward()) { + if (compl_shows_dir_forward() && !compl_autocomplete) { compl_shown_match = compl_first_match->cp_next; } } diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua @@ -1413,11 +1413,11 @@ describe('completion', function() -- oldtest: Test_autocompletedelay() it("'autocompletedelay' option", function() + screen:try_resize(60, 10) source([[ call setline(1, ['foo', 'foobar', 'foobarbaz']) set autocomplete ]]) - screen:try_resize(60, 10) screen:expect([[ ^foo | foobar | @@ -1579,4 +1579,48 @@ describe('completion', function() feed('<esc>') end) + + it([[first item isn't selected with "fuzzy" and 'acl']], function() + screen:try_resize(60, 10) + source([[ + call setline(1, ["v", "vi", "vim"]) + set autocomplete completeopt=menuone,noinsert,fuzzy autocompletedelay=300 + ]]) + + feed('Govi') + screen:expect([[ + v | + vi | + vim | + vi^ | + {4:vi }{1: }| + {4:vim }{1: }| + {1:~ }|*3 + {5:-- INSERT --} | + ]]) + + feed('<Esc>Sv') + screen:expect([[ + v | + vi | + vim | + v^ | + {4:v }{1: }| + {4:vi }{1: }| + {4:vim }{1: }| + {1:~ }|*2 + {5:-- INSERT --} | + ]]) + feed('i') + screen:expect([[ + v | + vi | + vim | + vi^ | + {4:vi }{1: }| + {4:vim }{1: }| + {1:~ }|*3 + {5:-- INSERT --} | + ]]) + end) end) diff --git a/test/old/testdir/test_ins_complete.vim b/test/old/testdir/test_ins_complete.vim @@ -5842,4 +5842,27 @@ func Test_autocomplete_completeopt_preinsert() call Ntest_override("char_avail", 0) endfunc +" Issue #18326 +func Test_fuzzy_select_item_when_acl() + CheckScreendump + let lines =<< trim [SCRIPT] + call setline(1, ["v", "vi", "vim"]) + set autocomplete completeopt=menuone,noinsert,fuzzy autocompletedelay=300 + [SCRIPT] + call writefile(lines, 'XTest_autocomplete_delay', 'D') + let buf = RunVimInTerminal('-S XTest_autocomplete_delay', {'rows': 10}) + + call term_sendkeys(buf, "Govi") + call VerifyScreenDump(buf, 'Test_fuzzy_autocompletedelay_1', {}) + + call term_sendkeys(buf, "\<Esc>Sv") + call VerifyScreenDump(buf, 'Test_fuzzy_autocompletedelay_2', {}) + sleep 500m + call term_sendkeys(buf, "i") + call VerifyScreenDump(buf, 'Test_fuzzy_autocompletedelay_3', {}) + + call term_sendkeys(buf, "\<esc>") + call StopVimInTerminal(buf) +endfunc + " vim: shiftwidth=2 sts=2 expandtab nofoldenable