如何告诉zsh直接进入自动补全列表?

如何告诉zsh直接进入自动补全列表?

当我使用 zsh(默认安装 oh-my-zsh)并按下Tab它时,它会自动完成路径,这非常有用。

如果只有一个候选者,自动完成系统只需将候选者添加到您当前正在输入的路径中,正如预期的那样!

但如果有多个候选者,它会在 PS 下方显示一个列表供您查看,从这里您有两种选择:

  1. 您在列表中看到一个符合您意图的项目,您开始输入第一个字母并再次按 Tab 键以自动完成完整单词。

  2. 列表出现后直接按 Tab 键,然后可以使用导航键绑定选择列表中的项目,然后按 Enter 将所选项目追加到您正在键入的当前路径中。

在第二种情况下,您连续按Tab两次,第二次Tab进入导航模式。

有没有办法告诉zsh直接进入导航列表,换句话说,如果有选择列表,则突出显示第一项?

答案1

将以下内容添加到您的.zshrc文件中:

zstyle ':completion:::::default' menu yes select
  • 语句zstyle有点像 CSS 规则,第一个参数的功能类似于 CSS 选择器(或命名空间),第二个参数类似于 CSS 属性,所有其他参数都是值。覆盖 OMZ 的zstyle ':completion:*:*:*:*:*' menu select,就像在 CSS 中一样,我们需要使用“更重”的选择器,或者使用相同的选择器但稍后设置(后者完全取代现有规则)。在这里,我通过添加来使我们的选择器变得更重default。我们可以省略*s,因为选择器的这些部分对于标记来说始终为空default
  • select是分配给属性的值之一时menu,它告诉完成系统始终使用菜单选择使用菜单完成时。最后一个子句存在 OMZ 实现中的一个问题:尽管 OMZ 的规则告诉 Zsh 在使用菜单时始终使用选择,但它确实如此不是告诉 Zsh 始终使用菜单。为了始终在第一次尝试时启动菜单完成,我们需要添加yes.

或者,如果您厌倦了尝试配置 Zsh 的完成系统,请尝试我的Zsh 自动完成插件

答案2

有一个非常简单的方法可以实现这一点。我不知道 oh-my-zsh,但我知道这个问题
这就像zstyle '*' single-ignored complete在 shell 配置中包含某个位置一样简单,最好是您的 oh-my-zsh 配置已加载。希望这可以帮助!

相关内容