zsh:特定の順序で完了候補を埋める方法

zsh:特定の順序で完了候補を埋める方法

関数で指定された正確な順序で完成候補を入力したいと思います。私が理解したのは、-o nosortこれがうまくいくはずですが、期待どおりに機能しません。とても基本的なものが抜けたようです。それは何ですか?

autoload -Uz compinit && compinit -u
compdef _foo foo
_foo() {
  compadd -o nosort -- ccc aaa bbb
}
% foo <Tab>
aaa  bbb  ccc
# Want: ccc aaa bbb

答え1

これがなぜ必要なのかわかりませんが、追加チーム名via-J the-group-nameまたは-V the-group-name(略語-J the-group-name -o nosort)が有効です。だから:

compadd -V 'foo operands' -- ccc aaa bbb

私は、完成システムの詳細な動作を理解するために実際に努力したことはありません。いくつかのカスタムコンフィギュレータを定義しようとすると、通常はzshが提供するコンプリートを例にします。grep -rw -- nosort $fpathこれを使用する一部の完成者は次のとおりです。これにより、functions -t one-of-those-completers完成者を追跡し、その完成者に対してcompaddが呼び出される方法を示します。

関連情報