Wie verhindern Sie, dass zsh Platz vor dem Pipe-Symbol isst?

17

Wenn ich ein Leerzeichen gefolgt von dem Pipe-Symbol '|'in der zsh-Befehlszeile eingebe, wird das Leerzeichen von zsh aufgefressen und das Pipe-Symbol direkt vor dem vorherigen Wort platziert. Wie kann ich das verhindern? Ich bin mir nicht sicher über mögliche Stilkonventionen, aber ich mag ein Leerzeichen auf beiden Seiten des Pipe-Symbols für die Lesbarkeit. Ich benutze oh-my-zsh so ziemlich "out of the box".

Lösung

Basierend auf der Antwort von mpy unten habe ich die folgende Lösung verwendet:

Standardmäßig ist ZLE_REMOVE_SUFFIX_CHARS in zsh / ohmyzsh undefiniert. Wenn es undefiniert ist, verhält es sich so, als wäre es:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Ich habe meinem ~ / .zshrc die folgende Definition hinzugefügt:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(alle außer Pfeife) und Presto, perfekt! Problem weg.

scanny
quelle
1
Versuchen Sie dies zunächst erneut mit zsh -f(um das Laden Ihrer Konfiguration zu überspringen). Sie werden feststellen, dass zsh das nicht mehr macht. Dann müssen Sie (höchstwahrscheinlich) in oh-my-zsh graben, um herauszufinden, wie es das verursacht ;-)
Francisco

Antworten:

17

Ich nehme an, Sie meinen, wenn Sie TABeinen Befehl / Dateinamen abschließen, wird automatisch ein Leerzeichen hinzugefügt, aber nach dem Drücken |verschwindet es wieder. Sonst kann ich diesen Effekt nicht reproduzieren.

In diesem Fall sollte die Lösung jedoch so einfach wie möglich sein

ZLE_REMOVE_SUFFIX_CHARS=""

Die Erklärung ist ein bisschen knifflig, deshalb zitiere ich einfach man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Diese Parameter werden vom Zeileneditor verwendet. Unter bestimmten Umständen werden vom Vervollständigungssystem hinzugefügte Suffixe (normalerweise Leerzeichen oder Schrägstriche) automatisch entfernt, entweder weil der nächste Bearbeitungsbefehl kein einfügbares Zeichen war oder weil das Zeichen so markiert wurde, dass das Suffix entfernt werden muss.

Diese Variablen können die Zeichensätze enthalten, durch die das Suffix entfernt wird. Wenn ZLE_REMOVE_SUFFIX_CHARS gesetzt, werden diese Zeichen dazu führen, dass das Suffix entfernt wird. Wenn ZLE_SPACE_SUFFIX_CHARSdiese Option aktiviert ist, wird das Suffix entfernt und durch ein Leerzeichen ersetzt.

Wenn ZLE_REMOVE_SUFFIX_CHARSnicht festgelegt, entspricht das Standardverhalten:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Wenn ZLE_REMOVE_SUFFIX_CHARSgesetzt, aber leer ist, haben keine Zeichen dieses Verhalten. ZLE_SPACE_SUFFIX_CHARS hat Vorrang, so dass folgendes gilt:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

Bewirkt, dass die Zeichen &und |das Suffix entfernt, aber durch ein Leerzeichen ersetzt werden.

Nehmen Sie zur Veranschaulichung des Unterschieds an, dass die Option AUTO_REMOVE_SLASHaktiviert ist und das Verzeichnis DIR soeben mit einem angehängten Code abgeschlossen wurde /, nach dem der Benutzer Folgendes eingibt &. Das Standardergebnis ist DIR&. Mit ZLE_REMOVE_SUFFIX_CHARSSatz aber ohne Einbeziehung ist &das Ergebnis DIR/&. Mit ZLE_SPACE_SUFFIX_CHARSset to include ist &das Ergebnis DIR &.

Beachten Sie, dass bestimmte Vervollständigungen möglicherweise ein eigenes Verhalten zum Entfernen oder Ersetzen von Suffixen aufweisen, das die hier beschriebenen Werte außer Kraft setzt.

mpy
quelle
Ja, ich hatte es nicht bemerkt, bis Sie es erwähnt haben, aber es passiert erst nach einem Tab-Abschluss, danke für die Antwort, das gibt mir was ich brauche :)
scanny