为多个命令定义ZSH完成函数(compdef)

为多个命令定义ZSH完成函数(compdef),zsh,zsh-completion,Zsh,Zsh Completion,我有一个ZSH完成脚本,名为 #compdef kubens _arguments "1: :(- $(kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'))" 这将完成kubens命令。但是,如果用户提供某个安装参数,程序将与kns名称链接,因此我尝试使用相同的#compdef为这两个命令提供完整性 如何实现这一点?我们可以使用cmd=service表单作为#compdef行:

我有一个ZSH完成脚本,名为

#compdef kubens
_arguments "1: :(- $(kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'))"
这将完成
kubens
命令。但是,如果用户提供某个安装参数,程序将与
kns
名称链接,因此我尝试使用相同的
#compdef
为这两个命令提供完整性


如何实现这一点?

我们可以使用
cmd=service
表单作为
#compdef
行:

#compdef kubens kns=kubens

虽然我们可以为
#compdef
行使用多个名称,但是当
cmd
服务的行为相同时,可以使用
cmd=service
表单:

#compdef名称。。。[-{p | p}模式…[-N名称…]

文件将自动加载,完成名称时将调用其中定义的函数,每个名称都是要完成参数的命令的名称…

每个名称的格式也可以是“
cmd=service
”。在完成命令cmd时,该函数的行为通常与正在完成的命令(或特殊上下文)服务相同

--


谢谢,看起来这些信息有些被隐藏在手册中,没有谷歌搜索结果显示出来。我希望这个问题能帮助别人。