如何让 zsh 完成更像 bash 完成?

san*_*ity 21 zsh

我最近从 bash 转换到 zsh(我正在使用“oh my zsh”),但有一件事让我烦恼:

当我点击 tab 键时,第一个自动完成会自动填写,您需要通过反复点击 tab 来循环完成。

这与 bash 不同,在 bash 中只显示完成列表。如果所有补全具有相同的前缀,则填写此前缀。您可以通过继续键入来选择您想要的。

我发现后者更可取,因为它比通过反复点击 Tab 来选择完成更快键入。

在这方面,有没有办法让 zsh 完成更像 bash?

小智 22

setopt noautomenu
setopt nomenucomplete
Run Code Online (Sandbox Code Playgroud)

你需要他们两个。如果您按 Tab 键次数足够多,您将获得完成列表,但它永远不会向您迄今为止键入的内容添加任何字符。


Den*_*son 5

我不认为这是默认行为,但您可以使用以下方法将其关闭:

setopt +o menucomplete
Run Code Online (Sandbox Code Playgroud)

以不同方式影响此行为的其他设置包括:autolistautomenubashautolistlistambiguous。有关man zshoptions详细信息,请参阅“完成”部分。您可以将此命令添加到您的~/.zshrc文件中。

您可以通过执行以下操作以交互方式配置许多其他内容:

autoload -U compinstall
compinstall
Run Code Online (Sandbox Code Playgroud)

并按照提示和菜单进行操作。

在 Bash 中,这种行为是通过绑定Tabcompletemenu-completein来控制的~/.inputrc

"\C-i": complete   # do list completion
Run Code Online (Sandbox Code Playgroud)

或从 shell 提示或在~/.bashrc

bind '"\C-i": menu-complete' # do menu completion
Run Code Online (Sandbox Code Playgroud)

  • 元评论:你是如何让“tab”字符看起来像这样的? (3认同)
  • @好人:`<kbd>Tab</kbd>` (2认同)