zsh完了:順序に関係なくファイルの完了とオプションの提供

zsh完了:順序に関係なくファイルの完了とオプションの提供

foo1つ以上のファイル名と3つのオプションの組み合わせを使用するサンプルコマンドがあります。また、オプションはコマンドラインのどこからでも(ファイル名の前、後、間)指定できます。

foo --bbb file.txt --aaa file2.txt --ccc

ポーションを指定する完了ファイルがあります。

#compdef foo

 local -a args

 args+=(
    '--aaa'
    '--bbb'
    '--ccc'
 )

--optionsを使用してローカルファイルを完成させるには、最後に何を追加する必要がありますか?

答え1

電話してもいいcompaddより多くの完了時間を宣言するには、複数回ビルドできます。通常、これはいくつかの方法の1つで発生します。「新しい」完成システムのアクセシビリティ機能

最も簡単な方法はとをcompadd呼び出すことです_files

#compdef foo
local -a args
args=(--aaa --bbb --ccc)
compadd -- $args
_files

compadd次のヘルパー関数を呼び出す必要があります。_describe状況に合わせて完成を構成でき、説明があります。

#compdef foo
local args
args=('--aaa:Enable aye' '--bbb:Enable bee' '--ccc:Enable sea')
_describe -o 'Options' args
_files

これ_arguments関数を使用すると、コマンド補完をより簡単に指定できますが、単純な場合には大きな利点はありません。コマンドが後続--のすべての項目が--オプションではなくファイル名であることを示すことをサポートしている場合(ダッシュで始まっても)、必ずそれを使用してください。これが_argumentss-Sオプションの役割です。 before オプションは、その*オプションがないと、そのオプションが複数回表示されることを示します。そのオプションがすでに存在する場合、そのオプションは再提供されません。

#compdef foo
_arguments -S \
    '*--aaa[Enable aye]' \
    '*--bbb[Enable bee]' \
    '*--ccc[Enable sea]' \
    '*:file:_files'

コマンドが--helpGNUが確立した事実上の標準に近い形式でヘルプ印刷をサポートしている場合は、解析された_arguments出力を知らせることができ、出力から推論できないより洗練された動作を--help指定するだけです。--help

#compdef foo
_arguments --

出力から推論される以外に何も必要ない場合は、--help完成関数を定義する必要はありません。_gnu_genericコマンドの完成機能として。

compdef _gnu_generic foo

関連情報