私はArch Linuxとzshを使用しています。私はそれを使用しています飲み込むなどの他のコマンドのラッパーとして、zshオートコンプリートが私が入力した後にフラグ/パラメータを提案し、オートコンプリートはforに似ていますが、フラグを持たないようにしたいと思いdevour cmd args...
ます。たとえば、提案する必要があるフラグを入力します。cmd
cmd
devour
sudo
devour
devour id <TAB>
id
私は確認しましたが/usr/share/zsh/functions/Completion/Unix/_sudo
、オートコンプリートzshスクリプトについてはよくわかりません。
これらのラッパー用のオートコンプリートスクリプトをどのように作成できますか?
答え1
devour
他のコマンドのプレフィックスにすぎず、独自のオプションがない場合は、次を使用してください。_precommand
完全な機能。これがzshが、、、、eval
などのためのものです。time
noglob
nohup
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
。