很多时候我最终会围绕现有函数编写包装函数,例如:
function gl {
some_computed_stuff=...
git --no-pager log --reverse $some_computed_stuff "$@"
}
function m {
make "$@" && notify-send success || notify-send failed
}
我知道别名保持自动完成,但有时需要函数,在这种情况下自动完成会丢失。
例如,我希望git log
完成gl
或make
完成m
。
我尝试添加compctl -K _git gl
,但没有提出任何建议。它无论如何都不会工作,因为我必须以某种方式找到如何为log
自动完成脚本提供_git
参数,所以我的问题是:
有没有办法让ZSH(还有bash)明白打字gl
与git log
完全相同?像(仅限ZSH):
compctl 'git log' gl
compctl 'make' m
答案 0 :(得分:5)
对于zsh,您可以使用compdef功能创建新的完成。
在其基本形式中,它将完成函数与单词相关联。如果zsh带有许多已经内置的完成,那么可以重用它们。例如,对于问题中的m
函数:
$ compdef _make m
根据文档,如果在完成功能中定义了特定服务,您还可以定义特定服务的完成。同样,由于zsh随_git
完成而已定义git-log
服务,因此问题中的gl
函数可能会自动填充:
$ compdef _git gl=git-log
在Linux上,您可以在/usr/share/zsh/functions/Completion/Unix/
中看到现有的完成实现。您可以阅读完成实现以查看它们定义的服务。