如何使 zsh 完成行为更像 bash 完成?

如何使 zsh 完成行为更像 bash 完成?

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

当我按下 Tab 键时,第一个自动完成项会自动填写,您需要通过反复按下 Tab 键来循环完成。

这与 bash 不同,bash 只会向您显示补全列表。如果所有补全都有相同的前缀,则此前缀会被填充。您可以通过继续输入来选择所需的一个。

我发现后者更可取,因为它打字速度更快,而不是通过反复按 Tab 键来选择完成。

有没有什么办法可以让 zsh 完成行为更像 bash?

答案1

setopt noautomenu
setopt nomenucomplete

您需要两者。如果您多次按下 Tab 键,您将获得完成列表,但它永远不会在您迄今为止输入的内容中添加任何字符。

答案2

我不认为这是默认行为,但你可以使用以下命令将其关闭:

setopt +o menucomplete

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

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

autoload -U compinstall
compinstall

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

Tab在 Bash 中,此行为通过绑定到completemenu-complete来控制~/.inputrc

"\C-i": complete   # do list completion

或者从 shell 提示符或者在~/.bashrc

bind '"\C-i": menu-complete' # do menu completion

相关内容