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

3

我有一个名为ZSH的自动补全脚本,称为

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

这提供了对kubens命令的自动完成。但是,如果用户提供了特定的安装参数,程序将链接到kns名称,因此我正在尝试为这两个命令使用相同的#compdef提供自动完成。

我应该如何实现?

1个回答

5
我们可以在#compdef行中使用cmd=service表单:
#compdef kubens kns=kubens

尽管在#compdef行中可以使用多个名称,但当cmd的行为与service相同时,可以使用cmd=service表单:

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

该文件将被设置为可自动加载,并在完成名称时调用其中定义的函数,每个名称都是要完成其参数的命令的名称...
...
每个名称也可以采用“cmd=service”的形式。在完成命令cmd时,该函数通常的行为就像正在完成service命令(或特殊上下文)一样。

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


谢谢,看起来这个信息有点深藏在手册里,而且没有任何谷歌搜索结果显示它。我希望这个问题能帮助其他人。 - ahmet alp balkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接