ラッパー内の実行可能ファイルのzshオートコンプリート提案フラグを作成するには?

ラッパー内の実行可能ファイルのzshオートコンプリート提案フラグを作成するには?

私はArch Linuxとzshを使用しています。私はそれを使用しています飲み込むなどの他のコマンドのラッパーとして、zshオートコンプリートが私が入力した後にフラグ/パラメータを提案し、オートコンプリートはforに似ていますが、フラグを持たないようにしたいと思いdevour cmd args...ます。たとえば、提案する必要があるフラグを入力します。cmdcmddevoursudodevourdevour id <TAB>id

私は確認しましたが/usr/share/zsh/functions/Completion/Unix/_sudo、オートコンプリートzshスクリプトについてはよくわかりません。

これらのラッパー用のオートコンプリートスクリプトをどのように作成できますか?

答え1

devour他のコマンドのプレフィックスにすぎず、独自のオプションがない場合は、次を使用してください。_precommand完全な機能。これがzshが、、、、evalなどのためのものです。timenoglobnohup

compdef _precommand devour

プレフィックスコマンドにオプションがある場合、これらのオプションの実行方法を指定する一般的な方法は次のとおりです。_arguments機能。少なくとも渡すこと-S -A "-*"_arguments、プレフィックスオプションがコマンド名の後に完了する必要がなく、--コマンド名の前に表示されることを意味します(これにより、コマンド名がダッシュで始まる可能性があります)。エイリアス、関数、または組み込みコマンド以外の外部コマンドのみをコマンド名として使用できるように指定するには、最初の引数()1の完成形式を指定します_command_names -e*()に渡されたオプション以外の引数の完成機能を提供します。_normal -p $service。これは_arguments非常に複雑な解析を行い、予期しない場所で句読点と空白の問題を実行します。 (エラーの影響はまったく完了していないことから、メニューの完了が予想されるプロンプトを表示しない、または特定のネストされたコンテキストで間違ったことを完了するなど、非常にマイナーな問題までさまざまです)。なる完了機能から。

#compdef my_prefix
_arguments -S -A '-*' : \
  '1:command: _command_names -e' '*:: : _normal -p $service'

_fakerootそして_setsidいくつかの素晴らしい、簡単な例があります。より詳細な例は次のとおりです。_sudoそして_xargs

バラよりカスタムコマンドの動的zshオートコンプリート完成機能を配置する方法と場所に関する一般的なアドバイスです。

この答えはあなたが「新しいスタイル」(1990年代半ばに追加された)完成システムを使用していcompinitます.zshrc

関連情報