修正する:

修正する:

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

おすすめ記事