zsh完了とそのメニューの動作を修正しようとしています。詰まった。あまりにも多くの文書を読んで頭がめまいになりました。
以下は単なる例です。私は具体的ではない答えを好みますcd
。
私は明示的に完了したときに選択メニュー()のみを表示するようにzshを設定しましたzstyle ':completion:*:*:*:*:*' menu select=2
。
私はエイリアスを持っていますalias cd='nocorrect cd'
。cd<TAB>
空白なしでこれを行うと、zshはそれが明示的であると考えてエイリアスを完成させます。 zshはそれがあいまいではないと思います。実際、私がこれを行うと、cd<^D>
可能な完了が1つだけ表示されます。他の完成オプション(例:)を表示する必要があるようですcdiff
。実際にこれを行うと、cd<^Xn>
他のオプションが表示されます。これもZSHユーザーガイド、セクション6.5.2。
私は何が起こっているのか理解しているようだった。zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix
そのエイリアスを拡張することが優先順位だと思う理由を理解できるように、完了者を設定しました。なぜこれが起こるのか理解できません。ただオプション。
私はこれがtag-order
ユーザーガイドの2番目の例に関連していると思います。セクション6.4.2。ただし、:completion::complete:-command-::
このコンテキスト()にはこのような設定はなく、継承できる他の項目もありません。
私の完了に関する設定はすべてこのファイルはGithubにあります。そこから上がると、私のzsh設定の全内容を見ることができます。しかし、:completion:
私のファイルを含むこのファイルの外には何も設定していないので、.zshrc
それをオーバーライドすることがあるかどうか疑われます。
それでは、私が望む行動を得るために何をすべきかを誰かが私に説明できますか?
ちなみに、私はPreztoフレームワークでzshを使用していますが、問題は組み込みのzsh機能とモジュールに完全に関連しているので、これは関係がないと思います。
いくつかの出力:
cd<TAB>
:cd
に変更されただけですnocorrect cd
。メニューはありません。
$ cd<^D>
-- alias --
nocorrect cd
$ cd<^Xn>
-- external command --
cdbs-edit-patch cd-fix-profile cdiff
cd-create-profile cd-iccdump
-- builtin command --
cd
-- shell function --
cdls
-- alias --
cd
-- parameter --
CDPATH cdpath
答え1
@Iluaの答え私はうまくいきませんでしたが、何を探すべきかについていくつかのアイデアを得て、問題を解決しました。
私が必要とするスタイルは次のとおりですregular
。man zshcompsys
regular
This style is used by the _expand_alias completer and bindable command.
If set to ‘true’ (the default), regular aliases will be expanded but only in command position.
If it is set to ‘false’, regular aliases will never be expanded.
If it is set to ‘always’, regular aliases will be expanded even if not in command position.
私はそれを使用し、zstyle ':completion:*' regular 'false'
素晴らしい動作します。
答え2
accept-exact
falseに設定したいスタイルを探していると思います。
manzshcompsys
accept-exact
This is tested for the default tag in addition to the tags valid for the current context. If it is set to `true' and any of the trial matches is the same as the string on the command line, this match will immediately
be accepted (even if it would otherwise be considered ambiguous).