为多个命令定义ZSH完成功能(compdef)

时间:2017-05-17 04:42:11

标签: zsh zsh-completion

我有一个名为

的ZSH完成脚本
#compdef kubens
_arguments "1: :(- $(kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'))"

这为kubens命令提供了完成功能。但是,如果用户提供某个安装参数,该程序将与kns名称链接,因此我尝试使用相同的#compdef为这两个命令提供完成。

我如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

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

#compdef kubens kns=kubens

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

  

service

     

文件将被自动加载,并且在完成名称时将调用其中定义的函数,每个名称都是要完成其参数的命令的名称...
  ...
  每个名称也可以是“#compdef name ... [ -{p|P} pattern ... [ -N name ... ] ]”形式。完成命令 cmd 时,该功能的行为通常与完成命令(或特殊上下文) service 的操作相反。

     

- zshcompsys(1): Completion System, INITIALIZATION, Autoloaded files, #compdef