我改用了 zsh,但我不喜欢它的补全功能。如果我有 20 个文件,每个文件都有一个共同的前缀,按下 tab 键时,zsh 会完全补全第一个文件,然后每次按下 tab 键时继续浏览列表。如果我想要一个接近结尾的文件,我必须多次按下 tab 键。
在 bash 中,这很简单 - 按下 tab 键,我就会得到前缀。如果我继续输入(并按下 tab 键),bash 会尽可能地完成它能确定的输入。我发现这种行为更加直观,但我更喜欢 zsh 而不是 bash 的其他功能。
有没有办法获得这种完成风格?Google 建议setopt bash_autolist
,但这对我没有效果(启动我的 shell 时没有打印任何错误消息)。
谢谢。
答案1
尝试:
setopt autolist
unsetopt menucomplete
答案2
你想要的可能是这样的:
setopt noautomenu
答案3
如果您使用 .zshrc 中的“菜单选择”选项,则还有另一种选择,如下所示:
autoload -U compinit
compinit
zstyle ':completion:*:*:*:*:*' menu select
您将能够使用箭头键浏览结果。让我们以“20 个具有共享前缀的文件”为例:
- 第一次按下 [TAB] 时,zsh 将尽可能地完成更多操作,然后显示可能性列表
- 然后你可以像在 bash 中一样完成(输入一个额外的字符,转到 0)
- 或者重新输入 [TAB],然后你会看到 shell 提示符下方的菜单中突出显示的可能选项;此外,你还可以使用箭头键在各种可能性中导航
最终得出最后一种可能:
- 使用 Bash 时,最好先按 [TAB],然后按一个额外的字符,然后再按 [TAB](可能更多)
- 使用 Zsh,您可以按 [TAB] 然后再次按 [TAB](进入菜单),然后按“<-”(左箭头键)到达最后一个元素
在这种情况下,两者都是 3 个按键。其余的则主要取决于个人喜好。