Zsh 完成:移至第一个选项卡上的列表选择

Zsh 完成:移至第一个选项卡上的列表选择

简短的介绍

当我输入<tab>zsh 时,我希望突出显示第一个完成候选者立即地而不是要求我第二次点击<tab>以聚焦列表。

例子

假设我有这样的目录结构:

Projects/
  |
  +-- FooAwesome/
  |
  +-- FooAwesomeThings/
  |
  +-- FooBar/

如果我进入Projects/并输入cd Foo<tab>,zsh 会友好地向我提供一个选项列表。

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.

相关内容