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'
これにより、その項目A
が表示されるだけでなく、別の新しいオプションも表示されます。
foo -<TAB>
-A -B -i -x
ここで何が起こっているのでしょうか?
ベストアンサー1
_arguments
このオプションに引数を必要とするように指示します。オプションの後のオプションは、オプションが+
同じ単語にあっても別の単語にあってもよいことを示します。最初の部分の後の部分:
は、一致が生成されたときに表示されるメッセージであり、ここでは何も完了しないので意味がありません。 2番目の列の次の部分は完成機能であり、おそらくないでしょう。
_arguments -S : \
'*-A+:number:' \
'*-B+:number:' \
'*-i'
長いオプションの場合、 と の両方が許可されている場合、または 1 つしか許可されていない場合は、オプション名の後にでは=
なく、:
オプション名の後に配置されます。ネットワーク(TCP / UDP)ポートの場合、コマンドがポート名を受け入れると、完成機能として使用されます。--port 123
--port=123
=-
--port=123
_port