Zsh 完成,启用 shift-tab

Ale*_*ura 14 zsh configuration autocomplete

当 zsh 向您显示可能完成的菜单时,我希望它让我shift-tab用来访问以前的完成条目 - 是否有一个选项可以控制用于访问先前完成条目的键?

如果是这样,我需要将什么添加到我的~/.zshrc 文件中才能进行设置。

如果它有什么不同,我目前可以使用箭头键浏览完成菜单,但我不喜欢这样做,因为箭头键感觉不合适且使用起来很尴尬。

llu*_*lua 17

您想将编辑器命令绑定reverse-menu-completemenuselect键盘映射。

bindkey -M menuselect '^[[Z' reverse-menu-complete
Run Code Online (Sandbox Code Playgroud)

我不确定转义序列的可移植性如何^[[Z,因此您可能需要检查 terminfo(5) 以查看是否有使用$terminfo数组正确绑定它的方法。

请注意,menuselect加载zsh/complist模块后,键盘映射可用。如果您已使用 配置完成系统compinstall,则该模块通常会在您第一次完成某事时自动加载。为了能够将该绑定添加到您的~/.zshrc,您需要首先在那里手动加载模块:

zmodload zsh/complist
Run Code Online (Sandbox Code Playgroud)

  • 在将`bindkey` 行添加到`~/.zshrc` 文件后调用`zsh` 时出现以下错误:`~/.zshrc:bindkey:190: no such keymap \`menuselect'` (3认同)
  • 那将是`"${terminfo[kcbt]}"`。 (3认同)

小智 7

接受的答案实际上对我不起作用。zsh如果我尝试在inzstyle ':completion:*' menu select'中使用菜单完成(设置),则会崩溃:zmodload zsh/complist.zshrc

name clash when adding ZLE function `menu-select'
Run Code Online (Sandbox Code Playgroud)

如果您不设置zstyle ':completion:* menu select,则它不会执行任何操作(因为完成操作不使用菜单),或者如果您不包含,zmodload...则设置不起作用。

正确且简单的设置是:

bindkey '^[[Z' reverse-menu-complete
Run Code Online (Sandbox Code Playgroud)

如果您启用完成菜单和“内联”完成建议,这有效!