zsh:当我键入命令Y时,对命令X使用补全

zsh:当我键入命令Y时,对命令X使用补全,zsh,tab-completion,programmable-completion,Zsh,Tab Completion,Programmable Completion,在zsh中,我有一个名为g的函数,其作用如下: 在没有参数的情况下,调用git status 使用一个或多个参数,将所有给定参数委托给git,即调用git$@ 我希望g的选项卡完成方式与git完全相同。我可以用别名g=git实现这一点,但默认情况下(上面的第一点),这不允许我调用状态 我如何授权完成git的git 在bash中,我只做了complete-F\u git g,它重新使用了git的completion函数。使用zsh,git的完成看起来要复杂得多,我无法找到类似的解决方案 我猜z

在zsh中,我有一个名为
g
的函数,其作用如下:

  • 在没有参数的情况下,调用
    git status
  • 使用一个或多个参数,将所有给定参数委托给git,即调用
    git$@
我希望
g
的选项卡完成方式与
git
完全相同。我可以用
别名g=git
实现这一点,但默认情况下(上面的第一点),这不允许我调用
状态

我如何授权完成git的
git

在bash中,我只做了
complete-F\u git g
,它重新使用了git的completion函数。使用zsh,git的完成看起来要复杂得多,我无法找到类似的解决方案

我猜zsh中有一个函数可以说“假设我键入了命令[x],您将如何完成它?”。如果我知道那是什么,它应该足够简单,可以使用一个函数来委托给它。但我在手册中找不到这样的功能。

相关文档说明:

功能
compdef
可用于将现有完成功能与新命令相关联。比如说,

compdef _pids foo
但是调整它(
\u git
是git通常的完成函数)并没有为我产生工作结果(即使在自动加载了
\u git
之后):

我可以通过
\u dispatch
让它工作,不过:

compdef '_dispatch git git' g

真奇怪。我也有同样的事情发生,但是其他的完成函数在第一个命令中工作得很好。非常好,非常感谢!至于为什么第一个不起作用,也许是因为_git的完成已经足够定制,仅仅重定向它不足以让它响应任何有用的东西?(也就是说,它可能会检查命令是否以“git”开头)您知道如何调整
compdef'\u dispatch git git'g
使g像git status一样自动完成,而不仅仅是git吗?谢谢您提供了如何在bash中工作的提示!
compdef '_dispatch git git' g