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