在zsh中,我有一个名为g
的函数,其行为如下:
git status
git $@
我希望g
的标签完成与git
完全相同。我可以使用alias g=git
来实现此目的,但这不允许我默认调用status
(上面的第一点)。
如何委托git
完成?
在bash中,我只是做了complete -F _git g
,它重用了git的完成功能。使用zsh,git的完成看起来要复杂得多,我无法找到类似的解决方案。
我猜zsh中有一些函数说“假装我输入了命令[x],你会把它完成什么?”。如果我知道那是什么,那么使用函数委托给它应该很简单。但是我在手册中找不到这样的功能。
答案 0 :(得分:17)
compdef
的文档说明了这一点:
函数
compdef
可用于将现有的完成函数与新命令相关联。例如,compdef _pids foo
但是调整它(_git
是 git 的常用完成函数)并没有为我产生一个工作结果(即使在_git
被自动加载后):
compdef _git g
我能够通过_dispatch
让它工作:
compdef '_dispatch git git' g