我有一個以主機名作爲參數的自定義腳本。我知道我可以很容易地複製現有的ssh完成,如下所示:如何將現有補全「複製」到zsh中的其他命令中
compdef myscript=ssh
但是,這隻能使第一個參數完成。有沒有簡單的方法來啓用相同的完成所有參數?
我有一個以主機名作爲參數的自定義腳本。我知道我可以很容易地複製現有的ssh完成,如下所示:如何將現有補全「複製」到zsh中的其他命令中
compdef myscript=ssh
但是,這隻能使第一個參數完成。有沒有簡單的方法來啓用相同的完成所有參數?
我不知道easy方法來啓用自定義命令的完成。假設你有一個命令foo
帶着一幫允許參數bar
,bas
或baz
,然後完成很簡單:你可以有foo bar
,foo bas
或foo baz
。如果他們不是or
'd,但是,你可以有任何三個組合。
它變得略差,當你有一個超過1「深度」(bar
可以使用參數car
,cas
和caz
,例如)。
在zsh
中,我的一般理解是在completion functions
中詳細說明了命令的完成情況。這些函數是特定於應用程序的,因爲每個應用程序的參數都是特定於這些應用程序的。例如,tmux
(終端複用器,類似於screen
,如果您不熟悉)具有相當複雜的完成功能:here's a link。
如果您想編寫自己的完成功能,則文檔可用並可訪問。這裏有一些鏈接,我正在(緩慢)按照我的方式工作 - 他們一定會告訴你如何完成工作,但有很多閱讀。 Z-Shell是一個複雜的野獸。
你在實現對主機名狀的參數完成特別感興趣,和你單挑ssh
爲理念。如果你有ZSH源,ssh
的zsh
完成函數定義在Completion/Unix/Command/_ssh
中。如果不是,這是一個link。
當然,this SO question是非常相似。如果myscript
和ssh
的參數足夠相同,則可以單獨使用compdef
。