zsh-Vervollständigung - mehr Optionen anzeigen als nur den Alias

zsh-Vervollständigung - mehr Optionen anzeigen als nur den Alias

Ich versuche, das Verhalten der ZSH-Vervollständigung und ihrer Menüs zu ändern. Ich stecke fest und habe so viel Dokumentation gelesen, dass mir schwindelig wird.

Das Folgende ist nur ein Beispiel. Ich bevorzuge Antworten, die nicht spezifisch sind auf cd.

Ich habe zsh so eingerichtet, dass das Auswahlmenü nur angezeigt wird, wenn die Vervollständigung eindeutig ist ( zstyle ':completion:*:*:*:*:*' menu select=2).

Ich habe einen Alias alias cd='nocorrect cd'​​. Wenn ich cd<TAB>(kein Leerzeichen) eingebe, denkt zsh, dass es eindeutig ist, und vervollständigt den Alias. zsh denkt, dass es eindeutig ist – tatsächlich cd<^D>zeigt es nur die eine mögliche Vervollständigung an, wenn ich eingebe. Meiner Meinung nach sollte es andere Vervollständigungsoptionen wie anzeigen cdiff. Tatsächlich cd<^Xn>sehe ich diese anderen Optionen, wenn ich eingebe. Dies ist auch das gezeigte Verhalten in derZSH-Benutzerhandbuch, Abschnitt 6.5.2.

Ich verstehe irgendwie, was los ist. Ich habe meine Vervollständiger als eingerichtet zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix, also kann ich verstehen, warum es denkt, dass die Erweiterung dieses Alias ​​die erste Priorität hat. Ich kann nur nicht herausfinden, warum es das istnurMöglichkeit.

Ich würde denken, dass es etwas damit zu tun hat tag-order, wie im zweiten Beispiel im BenutzerhandbuchAbschnitt 6.4.2. Ich habe jedoch nichts dergleichen für diesen Kontext ( :completion::complete:-command-::) eingerichtet, oder irgendetwas anderes, von dem es erben könnte.

Alle meine Vervollständigungseinstellungen sind indiese Datei auf Github. Wenn Sie von dort nach oben gehen, können Sie meine gesamte ZSH-Konfiguration sehen. Ich habe jedoch :completion:außerhalb dieser Datei nichts für eingerichtet, auch nicht in meiner .zshrc, daher bezweifle ich, dass irgendetwas sie überschreibt.

Kann mir also bitte jemand erklären, was ich tun muss, um das gewünschte Verhalten zu erzielen?

Zu Ihrer Information: Ich verwende zsh mit dem Prezto-Framework, was meiner Meinung nach irrelevant ist, da das Problem ausschließlich mit integrierten zsh-Funktionen und -Modulen zusammenhängt.


Einige Ausgaben:

cd<TAB>: ändert sich nur cdzu nocorrect cd, kein Menü.

$ 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 

Antwort1

@Iluas Antworthat nicht funktioniert, aber es hat mir einige Ideen gegeben, wonach ich suchen sollte, und ich habe das Problem gelöst.

Der Stil, den ich brauchte, war regular. Von 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. 

Ich habe verwendet zstyle ':completion:*' regular 'false'und es funktioniert perfekt.

Antwort2

Ich denke, Sie suchen nach dem accept-exactStil, den Sie auf „False“ setzen möchten.

Mann zshcompsys

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

verwandte Informationen