Autocomplete 如何";“复制”;zsh中其他命令的现有补全

Autocomplete 如何";“复制”;zsh中其他命令的现有补全,autocomplete,zsh,Autocomplete,Zsh,我有一个自定义脚本,它将主机名作为参数。我知道我可以很容易地复制ssh的现有完成情况,如下所示: compdef myscript=ssh 但这只允许完成第一个参数。是否有一种简单的方法可以为所有参数启用相同的完成功能?我不知道有一种简单的方法可以为自定义命令启用完成功能。假设您有一个命令foo,其中包含一组允许的参数bar、bas或baz,那么完成起来很容易:您可以使用foo-bar、foo-bas或foo-baz。但是,如果它们不是或'd,那么您可以将这三者任意组合 当“深度”大于1时(例

我有一个自定义脚本,它将主机名作为参数。我知道我可以很容易地复制ssh的现有完成情况,如下所示:

compdef myscript=ssh
但这只允许完成第一个参数。是否有一种简单的方法可以为所有参数启用相同的完成功能?

我不知道有一种简单的方法可以为自定义命令启用完成功能。假设您有一个命令
foo
,其中包含一组允许的参数
bar
bas
baz
,那么完成起来很容易:您可以使用
foo-bar
foo-bas
foo-baz
。但是,如果它们不是
'd,那么您可以将这三者任意组合

当“深度”大于1时(例如,
bar
可以采用参数
car
cas
caz
),情况会变得更糟

zsh
中,我的一般理解是命令的完成在
完成函数中有详细说明。这些函数是特定于应用程序的,因为每个应用程序的参数都特定于这些应用程序。例如,
tmux
(终端多路复用器,类似于
屏幕
,如果您不熟悉的话)有一个相当复杂的完成功能:

如果您想编写自己的完成函数,可以使用文档。这里有一大堆我正在(慢慢地)浏览的链接,它们肯定会告诉你如何完成工作,但是有很多阅读。Z-Shell是一种复杂的野兽

您特别感兴趣的是为类似主机名的参数启用补全功能,您选择了
ssh
作为想法。
ssh
zsh
完成函数是在
completion/Unix/Command/_-ssh
中定义的,如果您有zsh源代码的话。如果没有,这里有一个例子


当然,这是相当相似的<如果
myscript
ssh
参数足够相同,则code>compdef
单独可以执行您想要的操作