【问题标题】:Zsh completion need to hit <TAB> twiceZsh 完成需要按两次 <TAB>
【发布时间】:2017-08-02 00:34:24
【问题描述】:

我有一个命令xssh,它是原始ssh 命令的包装。这个命令我需要一个Zsh补全,补全规则和zsh完全一样。所以我在_xssh 文件中添加了以下内容

#compdef xssh
compdef xssh=ssh

我可以加载命令的补全,但问题是,如果这是我第一次在终端中使用xssh 命令并输入&lt;TAB&gt;,我必须输入两次&lt;TAB&gt;,以便完成就可以开始工作了。例如,我必须输入xssh ho&lt;TAB&gt;&lt;TAB&gt; 才能得到xssh hostname。但在那之后,我只需要输入xssh ho&lt;TAB&gt; 即可获得xssh hostnamehostname 在我的.ssh/config 文件中是唯一的)。那么你知道如何解决这个问题吗?

如果我像其他命令一样从头开始编写完成,则不会发生这种情况

【问题讨论】:

  • @Gal 谢谢。但我的问题有点不同。例如,如果我启动终端并输入xssh ho&lt;TAB&gt;&lt;TAB&gt;,它将完成我想要的内容。在同一个终端内,下次如果我输入xssh ano&lt;TAB&gt;,它将完成内容,立即为我说xssh another_host。对我来说,compdef xssh=ssh 似乎不会真正从 ssh 加载完成或将其分配给 xssh 命令,直到它确实需要这样做。我的其他自定义 Zsh 补全按我的预期完美运行。
  • @zijuexiansheng 你找到解决办法了吗?我有同样的问题

标签: zsh-completion


【解决方案1】:

我有同样的问题。

我的fpath 中有一个名为_gd 的完成文件,它看起来像这样:

#compdef gd
function _gd {
   ... my code ...
   _describe gd list
}

我第一次启动 shell 时需要按 2 次制表键才能工作,之后只需按一次。

要修复它,我所要做的就是删除 function {} 部分,所以它现在看起来就像

#compdef gd
...mycode...
_describe gd list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多