Command-Line
自定義腳本的 zsh 補全
我有
zsh completion
我的自定義腳本。它需要 3 個可選參數--insert
,--edit
,--rm
並從給定路徑完成文件:#compdef pass _pass() { local -a args args+=( '--insert[Create a new password entry]' '--edit[Edit a password entry]' '--rm[Delete a password entry]' ) _arguments $args '1: :->directory' case $state in directory) _path_files -W $HOME/passwords -g '*(/)' -S / _path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' ' ;; esac }
我需要添加另一個選項
-P
,也將提供完成(當我輸入-
and時TAB
),但不提供路徑完成。這個選項應該只接受一個字元串。-P
所以它不應該匹配一個路徑,如果已經指定,它也不應該提供其他選項。如何將此新選項添加到我的完成腳本?
更新:
完成不適用於 option
-P
,即當我這樣做時:pass -P <TAB>
它什麼也不做,因為選項 -P 需要一個字元串。這很好。但是,當我這樣做時
pass -P foo <TAB>
它也沒有完成任何事情。但它應該完成目前路徑中的目錄。怎麼能這樣做?
假設您提到的所有選項都是相互排斥的,那麼解決方案如下:
#compdef pass _pass() { local -a args=( # (-) makes an option mutually exclusive with all other options. '(-)--insert[Create a new password entry]' '(-)--edit[Edit a password entry]' '(-)--rm[Delete a password entry]' '(-)-P:string:' '1:password entry:->directory' ) _arguments $args case $state in directory) _path_files -W $HOME/passwords -g '*(/)' -S / _path_files -W $HOME/passwords -g '*.gpg(:r)' -S ' ' ;; esac }
此處的文件:http: //zsh.sourceforge.net/Doc/Release/Completion-System.html#index-_005farguments