From 739a44753d72df08eff91123734714f559c60510 Mon Sep 17 00:00:00 2001 From: li <3597387401@qq.com> Date: Sat, 5 Sep 2026 19:56:27 +0800 Subject: [PATCH] fix(cwd): :bcd completion shows non-directories #41661 Problem: Completion for `:bcd` shows files, not just directories. Solution: Set the ctx properly. --- src/nvim/cmdexpand.c | 2 ++ test/functional/editor/completion_spec.lua | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/nvim/cmdexpand.c b/src/nvim/cmdexpand.c index 2b92560d70..93e0ba93a9 100644 --- a/src/nvim/cmdexpand.c +++ b/src/nvim/cmdexpand.c @@ -2047,6 +2047,8 @@ static const char *set_context_by_cmdname(const char *cmd, cmdidx_T cmdidx, expa kCallbackNone ? EXPAND_FINDFUNC : EXPAND_FILES_IN_PATH; } break; + case CMD_bcd: + case CMD_bchdir: case CMD_cd: case CMD_chdir: case CMD_lcd: diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua index b9b91ec520..a383270a42 100644 --- a/test/functional/editor/completion_spec.lua +++ b/test/functional/editor/completion_spec.lua @@ -1068,6 +1068,21 @@ describe('completion', function() eq('edit', fn.getcompletion('restart ed', 'cmdline')[1]) end) + it('cmdline completion for :*cd family shows dirs only', function() + local dir = 'Xtest-cd-compl/' + local subdir1 = dir .. 'subdir1/' + local subdir2 = dir .. 'subdir2/' + finally(function() + n.rmdir(dir) + end) + fn.mkdir(subdir1, 'p') + fn.mkdir(subdir2, 'p') + fn.writefile({ '' }, dir .. 'file') + for _, cmd in ipairs({ 'cd', 'lcd', 'tcd', 'bcd' }) do + eq({ subdir1, subdir2 }, fn.getcompletion(cmd .. ' ' .. dir, 'cmdline')) + end + end) + describe('from the commandline window', function() it('is cleared after CTRL-C', function() feed('q:')