カスタムスクリプトのzshコンプリート:URL +オプションパラメータ

カスタムスクリプトのzshコンプリート:URL +オプションパラメータ

パラメータの1つはURL(たとえば文字列)でなければならず、いくつかのオプションのパラメータを持つzshを完成させるためのカスタムスクリプトがあります。 --AAA --BBB --CCC:

_arguments -S : \
    '--AAA' \
    '--BBB' \
    '--CCC' \
    '1: :'

ただし、完了はURLパラメータが指定されている場合にのみ機能します。

myscript URL --A<TAB>

これは自動的に行われます。--AAA

しかし、私が持っている場合:

myscript --A<TAB>

次に、一致する唯一のオプションであるAAAを一覧表示しますが、そうしても自動補完されません--AA<TAB>。手動で入力する必要があります。

完了スクリプトを次のように変更した場合:

_arguments -S : \
    '--AAA' \
    '--BBB' \
    '--CCC'

オートコンプリートパラメータは機能しますが、URLを指定しても他のオプションは完了しません。

もしそうなら、私のスクリプトはURL(たとえば、文字列引数 - zshが現在の場所でファイル名の完成を開始したくない)を期待し、オプションの引数がこのURLの前または後に完了できることを完了するようにzshに指示しますか? ?

注:URLをオートコンプリートするのではありません。私はこのURL文字列の前後に何かをしたいと思います。

答え1

公開されたコードを使用した後、myscript --ATabzshはオプションまたは非オプションのパラメーター番号1を完成させようとします。パラメーター1の操作は空で、次のものです。手動「(引用符のない単一の空白)」の下に説明します(操作にゼロ個以上の空白文字のみが含まれている場合は実際にトリガーされます)。

これは、パラメータが必要であるが一致するものを生成することが不可能または望ましくない場合に便利です。メッセージは表示されますが、完了項目はリストされません。

表示するメッセージがありません。メッセージ入力は単一の空白なので、「表示」操作は視覚的な影響を受けません。ただし、メッセージを表示する内部タスク(_message)実行、特にcompstate[insert]空に設定されています。これは、有効な完了が1つしかない場合でも、完了があいまいであるという信号を完了ユーザーインターフェースに送信します。

解決策は、zshが考えるように明示的に準備することです。終わりません。、考えるより完了しましたが作成できません。。次のいずれかが機能します。

_arguments … '1: :()'
_arguments … '1: :{}'
_arguments … '1: : true'

引数がURLの場合は、おそらく使用する必要があります_urls。これにより、入力後にオプションのみが完了します-(URLがaで始まらない-場合、または非常に積極的な部分文字列補完が設定されている場合)。

関連情報