commit d784ed7013b1b244728d01d180caf2f1a974c515
parent f2bda1effc17fd18b2a1552697c3ff4083b1258f
Author: zeertzjq <zeertzjq@outlook.com>
Date: Mon, 8 Sep 2025 08:13:24 +0800
vim-patch:9.1.1739: Matches may be listed twice with wildmode=longest,list
Problem: Matches may be listed twice with wildmode=longest,list when
"longest" doesn't change command line (after 9.1.1737).
Solution: Set did_wild_list when trying "list" after "longest"
(zeertzjq).
closes: vim/vim#18227
https://github.com/vim/vim/commit/a28a2eb9d9362adb1c7f9ebde66cd1329dd463bb
Diffstat:
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
@@ -1195,6 +1195,9 @@ static int command_line_wildchar_complete(CommandLineState *s)
nextwild(&s->xpc, WILD_NEXT, options, escape);
}
showmatches(&s->xpc, p_wmnu, wim_list_next, wim_noselect_next);
+ if (wim_list_next) {
+ s->did_wild_list = true;
+ }
}
}
} else {
diff --git a/test/functional/ui/popupmenu_spec.lua b/test/functional/ui/popupmenu_spec.lua
@@ -4517,7 +4517,7 @@ describe('builtin popupmenu', function()
feed('<esc>')
- -- Check "list" still works
+ -- Check that when "longest" produces no result, "list" works
command('set wildmode=longest,list')
feed(':cn<Tab>')
screen:expect([[
@@ -4530,6 +4530,8 @@ describe('builtin popupmenu', function()
cnfile cnoremenu |
:cn^ |
]])
+ feed('<Tab>')
+ screen:expect_unchanged()
feed('s')
screen:expect([[
|
diff --git a/test/old/testdir/test_cmdline.vim b/test/old/testdir/test_cmdline.vim
@@ -2900,6 +2900,8 @@ func Test_wildmenu_pum()
call term_sendkeys(buf, "\<C-U>set wildmode=longest,list\<CR>")
call term_sendkeys(buf, ":cn\<Tab>")
call VerifyScreenDump(buf, 'Test_wildmenu_pum_30', {})
+ call term_sendkeys(buf, "\<Tab>")
+ call VerifyScreenDump(buf, 'Test_wildmenu_pum_30', {})
call term_sendkeys(buf, "s")
call VerifyScreenDump(buf, 'Test_wildmenu_pum_31', {})