我有一个自定义脚本,它将主机名作为参数。我知道我可以像这样轻松复制现有的ssh完成:
compdef myscript=ssh
但这只能完成第一个参数。是否有一种简单的方法可以为所有参数启用相同的完成功能?
答案 0 :(得分:1)
我不知道 easy 方法可以启用自定义命令的完成功能。假设你有一个包含许多允许参数foo
,bar
或 bas
的命令baz
,那么完成很简单:你可以有foo bar
,foo bas
或foo baz
。但是,如果他们不是or
,那么你可以将这三者结合起来。
当你的'深度'超过1时会变得更糟(bar
可以带参数car
,cas
和caz
,例如) 。
在zsh
中,我的一般理解是命令的完成详见completion functions
。这些函数是特定于应用程序的,因为每个应用程序的参数都特定于这些应用程序。例如,tmux
(终端多路复用器,类似于screen
,如果你不熟悉的话)有一个相当复杂的完成函数:here's a link。
如果您想编写自己的完成功能,则可以使用该文档并可访问。这里有一堆链接,我(慢慢地)正在努力工作 - 他们肯定会告诉你如何完成工作,但是有很多阅读。 Z-Shell是一个复杂的野兽。
您特别想要启用类似主机名的参数的完成,并且您已经将ssh
作为主意。 zsh
的{{1}}完成函数在ssh
中定义,如果您有ZSH源。如果没有,这是一个link。
当然,this SO question非常相似。如果Completion/Unix/Command/_ssh
和compdef
参数足够相同,则myscript
可以单独执行您想要的操作。