仅包含目录的 Zsh 自动完成 ls 命令

Lam*_*mnk 5 ls zsh autocomplete

假设我有以下文件和目录:

% ls                                                                   
bui00293    buiawer      builds/     buiowpe/
Run Code Online (Sandbox Code Playgroud)

我要列出的内容 builds

% ls bui[TAB]
Run Code Online (Sandbox Code Playgroud)

然而,Zsh 显示了上面所有文件和目录的选项。我想要的是 zshcd命令的自动完成,即。仅自动完成目录名称。

Gil*_*il' 5

如果您总是只想为 完成目录名称ls,您可以将其放在您的.zshrc

compdef _dirs ls
Run Code Online (Sandbox Code Playgroud)

您可以compinit通过使用样式来使用“新”完成系统(由 初始化)做更有趣的事情。根据您的选择,您可能需要unalias ls. 然后,只在ls命令行上完成目录:

zstyle ':completion:*:ls:*' file-patterns '*(/):directories'
Run Code Online (Sandbox Code Playgroud)

默认情况下,您只能完成目录,但如果没有目录匹配,则完成任何文件名:

zstyle ':completion:*:ls:*' file-patterns '%p:globbed-files' '*(/):directories'
Run Code Online (Sandbox Code Playgroud)

您还可以定义一个键绑定来仅完成目录,然后您可以在任何地方使用这些目录。

zle -C complete_dirs .complete-word _dirs
bindkey '^X/' complete_dirs
Run Code Online (Sandbox Code Playgroud)