Warum sind einige (oft lange) Befehle in bash & zsh verstümmelt?

10

Wenn ich oft einen langen Befehl in bash oder zsh eingebe (dies sind die einzigen zwei Shells, bei denen ich mir sicher bin, dass ich das gesehen habe), verzieht sich der Cursor irgendwo in der Mitte der Zeichenfolge, die ich eingebe. Kann jemand erklären, warum dies so ist? und ob etwas dagegen unternommen werden kann?

Ich habe festgestellt, dass dies häufig passiert, wenn ich den Verlauf meiner Shell durchsuche (mit den Pfeiltasten). Wenn ich auf einen langen Eintrag stoße, wird der lange neue Eintrag mit dem vorherigen Eintrag verwechselt, wodurch der Text verstümmelt wird.

Ich habe ein Beispiel mit kurzen Saiten, das mir gerade aufgefallen ist:

Die Geschichte enthält:

mkdir sune1
mkdir sune2

Wenn ich zu mkdir sune1und dann zu navigiere , mkdir sune2würde ich erwarten, dass meine Befehlszeile mkdir sune2lautet (da dies das ist, zu dem ich jetzt navigiert habe) - aber stattdessen bekomme ich mkdir1sune2.

Ich habe das seit Jahren häufig bemerkt, aber es hat mich nie zu sehr gestört, aber ich denke, es ist Zeit für eine Veränderung! Also irgendwelche Ideen?

Jonatan
quelle

Antworten:

8

Ihre Eingabeaufforderungszeichenfolge hat wahrscheinlich nicht druckbare Zeichen falsch maskiert. Wenn Sie alles wie Farbänderungen in Ihrem Prompt haben, müssen Sie setzen \[und \]den Terminal - Escape - Sequenzen um so kann bash sagen , dass sie Platz auf dem Bildschirm einnehmen nicht - sonst verkalkuliert es , wo der eigentliche Befehl auf dem Bildschirm ist, und aktualisiert sie am falschen Ort. Siehe diesen Abschnitt von TLDP . In zsh setzen %{und %}um Escape-Sequenzen.

Gordon Davisson
quelle
Ich habe tatsächlich Farben in meiner Eingabeaufforderung, ich werde versuchen, ihnen zu entkommen oder sie zu entfernen und zu sehen, ob das hilft. Vielen Dank!
Jonatan
Erwägen Sie die Verwendung des Farbmoduls von zsh. Es sollte die Fehler Stackoverflow.com/questions/6159856/…
Francisco