简短的介绍
当我输入<tab>
zsh 时,我希望突出显示第一个完成候选者立即地而不是要求我第二次点击<tab>
以聚焦列表。
例子
假设我有这样的目录结构:
Projects/
|
+-- FooAwesome/
|
+-- FooAwesomeThings/
|
+-- FooBar/
如果我进入Projects/
并输入cd Foo<tab>
,zsh 会友好地向我提供一个选项列表。
但是,为了进入列表内的选择,我必须<tab>
在第一个候选者突出显示之前再次点击。
如何在我第一次点击时突出显示第一个选择<tab>
?
当前配置
zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate
zstyle ':completion:*' expand prefix
zstyle ':completion:*' matcher-list '' 'm:{[:lower:]}={[:upper:]}' 'm:{[:lower:][:upper:]}={[:upper:][:lower:]}' 'r:|[._-]=* r:|=*'
zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' file-list all
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' group-name ''
zmodload zsh/complist
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'j' vi-down-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect '^xi' vi-insert
zstyle :compinstall filename '/Users/ashton/.zshrc'
autoload -Uz compinit
compinit
我没有使用插件管理器oh-my-zsh
之类的东西。如果可能的话,我更喜欢“普通”解决方案,即纯 zsh 配置,没有任何花哨的自定义包或任何东西。
答案1
当我从配置中删除时,setopt menu_complete
它停止跳转到第一项。我想你可能setopt no_list_ambiguous
也需要结合这个。zshoptions(1)
说:
MENU_COMPLETE (-Y)
当完成不明确时,不要列出可能性或发出蜂鸣声,而是立即插入第一个匹配项。然后,当再次请求完成时,删除第一个匹配项并插入第二个匹配项,依此类推。当没有更多匹配项时,再次返回第一个匹配项。
reverse-menu-complete
可用于以另一个方向循环遍历列表。该选项会覆盖AUTO_MENU
.