【问题标题】:Is there a way to check if the tab completion menu is open in ZSH有没有办法检查选项卡完成菜单是否在 ZSH 中打开
【发布时间】:2021-02-13 13:49:09
【问题描述】:

有没有办法检查标签完成菜单是否在 ZSH 中打开?

我问这个问题是因为我想将空格键绑定到 accept-search 以便我可以接受使用 space 键完成,但我想以不干扰默认值的方式进行space 键的行为(插入 space 字符)。另外,我想要这个,因为我不喜欢用space 关闭完成菜单时会插入一个空格。

reddit 中的某个人帮助我完成了这个 sn-p,但我需要一种方法来检查自动完成菜单是否打开。

function space-or-accept-suggestion() {
  if <INSERT WAY TO CHECK IF AUTOCOMPLETION MENU IS OPEN>; then
    zle accept-search
  else
    zle self-insert
  fi
}

zle -N space-or-accept-suggestion
bindkey -M emacs ' ' space-or-accept-suggestion

【问题讨论】:

  • 你需要更清楚你想要检查的状态。据我所知,你所描述的无论如何都是默认的。 “自动完成”与 tab 键触发的完成相反,通常只能通过一些插件来实现,比如自动建议。如果您的意思是来自 complist 模块的菜单选择处于活动状态,则它使用 menuselect 键盘映射,因此您可以为其绑定不同的空间。但默认情况下,它会被接受并插入一个空格。
  • 更新了问题。它是标签触发的完成。谢谢!

标签: zsh oh-my-zsh zshrc zsh-completion zsh-zle


【解决方案1】:

您无需检查。就用这个吧:

zmodload zsh/complist
bindkey -M menuselect ' ' accept-search

更多信息可以在这里找到:http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#Menu-selection

【讨论】:

  • 这似乎没有任何作用。例如,我键入 cd ~/ 并按 Tab,选择某个选项,然后按空格,它仍然会插入空格。我认为也许我应该让自己适应默认行为而不是试图改变它,即使只有 zsh 不想那样工作。
  • @DavidGuevara 对不起,我忘了你还需要在使用 bindkey 命令之前执行 zmodload zsh/complist。我将其添加到我的答案中。请重试。
猜你喜欢
  • 2020-03-25
  • 1970-01-01
  • 2021-02-18
  • 2011-02-12
  • 2016-07-15
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-14
相关资源
最近更新 更多