为多个命令定义 ZSH 补全函数 (compdef)

Ahm*_*gle 3 zsh zsh-completion

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

#compdef kubens
_arguments "1: :(- $(kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'))"
Run Code Online (Sandbox Code Playgroud)

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

我该如何实现这一目标?

hch*_*baw 5

我们可以使用cmd=service#compdef行的形式:

\n\n
#compdef kubens kns=kubens\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

尽管我们可以为该行使用多个名称#compdef,但当其行为方式与以下相同时,cmd=service可以使用表单:cmdservice

\n\n
\n

#compdef name ... [ -{p|P} pattern ... [ -N name ... ] ]

\n\n

该文件将成为可自动加载的,并且在完成名称时将调用其中定义的函数,其中每个名称都是要完成其参数的命令的名称...
\n ...
\n 每个名称也可以是格式为 \xe2\x80\x98 cmd=service\xe2\x80\x99。当完成命令cmd时,该函数的行为通常就像命令(或特殊上下文)服务正在完成一样。

\n\n

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

\n
\n