私は数ヶ月間setopt completealiases
私の仕事をしてきました.zshrc
。なぜそれが追加されたのかわかりません。他のほとんどのコンテンツはコメントアウトされているか、隣接する設定で理解できます。だから私は数ヶ月間エイリアスの完全なタブを実行しませんでした。ザイルズの答えはここにあります。なぜ愚かな過去の私が何の説明もなく付け加えたのか理解しようとしています。
意図されたユースケースは何ですか?一般的な状況は何ですか?
1私の推測では次のようになります。有効エイリアスは完全に完成しており、文書の確認には気にしませんでした。
答え1
デフォルトでは、zsh は実行が完了する前にエイリアスを拡張します。これはほとんどの場合望ましい。エイリアスでコマンドを使用する場合は、コマンドに別の完成方法を使用したい場合があります。これはまれで、完了システムが実際の完了を決定するのに十分スマートではなく、追加のヒントを受け取る必要がある場合にのみ発生します。エイリアスがシステムの状態を変更しても、これが発生する可能性があります。たとえば、alias e1='cd ~/myproject1 && $EDITOR'
ファイル名はに基づいて完成しますが、デフォルトでは現在のディレクトリに基づいてファイル名を取得します。~/myproject1
これには2つの解決策があります。
- settings
complete_aliases
、エイリアスのさまざまな完成機能を定義します。これにより、定義したすべてのエイリアスに対して設定する必要があるため、面倒です。 - 他の完成が必要な場合は、エイリアスの代わりに関数を使用してください。 Zshは、与えられた完了が
foo () { bar --wibble --wobble "$@"; }
afterfoo
と等しくなければならないと推測しようとしませんbar --wibble --wobble
。
エイリアスを個別に実行する必要があることはまれであるため、関数を代わりに使用するつもりはありませんsetopt complete_aliases
。