我怎样才能使 zsh 完成的行为像 Bash 完成一样?

我怎样才能使 zsh 完成的行为像 Bash 完成一样?

我改用了 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 个按键。其余的则主要取决于个人喜好。

相关内容