zsh 完了 - エイリアスだけでなく、より多くのオプションを表示

zsh 完了 - エイリアスだけでなく、より多くのオプションを表示

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の答え私はうまくいきませんでしたが、何を探すべきかについていくつかのアイデアを得て、問題を解決しました。

私が必要とするスタイルは次のとおりですregularman 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-exactfalseに設定したいスタイルを探していると思います。

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).

関連情報