Shell
zsh 完成:需要數字作為參數的完整選項
我有一個腳本
foo
,它採用以下形式的幾個可選命令行參數:foo -A <NUM> -B <NUM> -i
或者也可以沒有空格:
foo -A<NUM> -B<NUM> -i
其中 NUM 是整數。該腳本不應完成文件名/目錄。
我有以下完成規則:
#compdef foo local -a args _arguments -S \ '*-A' \ '*-B' \ '*-i'
我必須添加什麼,以便完成知道選項
-A
或-B
自己不完成,但需要一個數字才能繼續完成?在另一個腳本中,我有類似的情況,唯一的區別是選項使用
=
:foo --port=<PORT>
我怎麼也能做到這一點?
更新:
我遇到了奇怪的問題,完成後:
#compdef foo _arguments -S \ '-A+:' \ '-B+:' \ '-i'
由於某種原因,第一個參數
A
被忽略,即:foo -<TAB> -B -i
但是當我把其他選項放在前面時
A
#compdef foo _arguments -S \ '-x+:' \ '-A+:' \ '-B+:' \ '-i'
then 不僅會
A
顯示,還會顯示其他新選項:foo -<TAB> -A -B -i -x
這裡發生了什麼?
告訴
_arguments
該選項需要一個參數。選項後面的表示該+
選項可以在同一個詞中,也可以在單獨的詞中。第一個之後的部分:
是生成匹配時顯示的消息,這裡沒有任何意義,因為不會有任何完成。第二列之後的部分是補全函式,大概沒有。_arguments -S : \ '*-A+:number:' \ '*-B+:number:' \ '*-i'
對於長選項,如果同時接受and或僅接受,則放在選項名稱之後
=
而不是放在選項名稱之後。對於網路 (TCP/UDP) 埠,如果您的命令接受埠名稱,請用作完成函式。:``--port 123``--port=123``=-``--port=123``_port