当我使用 zsh(默认安装 oh-my-zsh)并按下Tab它时,它会自动完成路径,这非常有用。
如果只有一个候选者,自动完成系统只需将候选者添加到您当前正在输入的路径中,正如预期的那样!
但如果有多个候选者,它会在 PS 下方显示一个列表供您查看,从这里您有两种选择:
您在列表中看到一个符合您意图的项目,您开始输入第一个字母并再次按 Tab 键以自动完成完整单词。
列表出现后直接按 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 配置已加载。希望这可以帮助!