Ich ärgere mich ein wenig darüber, wie zsh
vollständige Vorschläge für meine Befehle gemacht werden.
Wenn ich den Anfang eines Befehls eingebe, den ich nicht installiert habe, und drücke tab
, wird die installierte Abschlussfunktion vorgeschlagen.
Nehmen wir an, ich möchte ausführen, vim
aber es ist nicht installiert _vim
.
Gibt es eine Möglichkeit, dies auszuschalten? Oder habe ich in meinem Setup etwas falsch gemacht?
Alle meine Dotfiles sind öffentlich bei github.com/henrikbjorn/castle
.
zsh
autocomplete
Henrik Bjørnskov
quelle
quelle
Antworten:
Standardmäßig versucht die Abschluss-Engine von zsh nur, etwas an Ihre Eingabe anzuhängen. Sie haben es so konfiguriert, dass auch versucht wird, ein Präfix hinzuzufügen. Die einfache Interactive Completion Configuration Engine (
compinstall
) bietet dies unter „Matching Control → Teilstring Completion“ an. Dies fügt eine Zeile wie diese in Ihre ein.zshrc
:Die
zstyle
eingebauten Einstellungen (meistens) für die Fertigstellung. Dermatcher-list
Abschlussstil ist eine Liste von Möglichkeiten, nacheinander zu versuchen, anzuhalten, wenn mindestens eine Übereinstimmung vorliegt. Die leere Zeichenfolge bedeutet die Standardvervollständigung (nur Suffixe). Die Beschwörung der Übereinstimmungssteuerungl:|=* r:|=*
bedeutet, eine Präfixübereinstimmung*
und eine Suffixübereinstimmung zu versuchen*
, dh ein beliebiges Präfix und Suffix.Sie können Präfixe verbieten, die
_
insgesamt beginnen . Dies ermöglicht weiterhin die Vervollständigung von Wörtern, die mit beginnen_
, und die Vervollständigung durch Hinzufügen eines Präfixes, aber das Präfix beginnt möglicherweise nicht mit_
.Dies gilt für alle Vervollständigungen, nicht nur für Vervollständigungen von Befehlsnamen. Ich weiß nicht, wie ich das auf Befehlsnamen beschränken soll.
Es sollte eine Möglichkeit geben, Befehlsnamen, die mit beginnen
_
, genauer auszuschließen , aber ich weiß nicht wie. Ein erster Start ist mit demignored-patterns
Abschlussstil.Dies schließt Übereinstimmungen aus, die mit beginnen
_
. Wenn jedoch keine Übereinstimmungen vorhanden sind, versucht zsh es erneut ohne die Ignorierregeln. Das Gute daran ist, dass der Befehl, wenn er zuerst mit einem Unterstrich gestartet wurde, in diesem zweiten Durchgang abgeschlossen wird. Das Schlimme ist , dass zsh also versuchen , einen Unterstrich trotzdem hinzufügen , wenn es keine Übereinstimmungen gibt, also , wenn Sievi
und ,view
aber nichtvim
drücken Sie dann Tabnachvi
bietenvi
undview
doch nicht_vim
, aber wenn Sie gebenvim
dann Abschluss bieten_vim
.quelle
ignore-patterns
funktioniert gut für mich, auch wenn es keine Übereinstimmungen gibt. Musste nur sicherstellen, dasscompleter
das nicht enthält_ignored
.