Dies ist eine Besonderheit von zsh
(und jetzt fish
auch), damit Sie nicht abgeschlossene Zeilen in der Ausgabe eines Befehls deutlich sehen können.
In herkömmlichen Shells wird die nächste Eingabeaufforderung der Shell an die letzte nicht abgeschlossene Zeile angehängt , wenn ein Befehl nach dem letzten Zeilenumbruchzeichen Daten ausgibt oder mit anderen Worten, wenn der Terminalcursor nicht am Zeilenanfang steht wie in:
bash-4.4$ printf XXX
XXXbash-4.4$
Das verstümmelt die Eingabeaufforderung, und es ist leicht zu übersehen, dass dies der Fall ist, XXX
besonders wenn Sie eine schickere Eingabeaufforderung wie diese haben. Dies wirkt sich auch auf die Cursorpositionierung aus, die zu Anzeigefehlern führt, wenn Sie den Cursor bewegen.
zsh
Dies wird umgangen, indem gezeigt wird, dass die Ausgabe eine nicht abgeschlossene Zeile mit einem %
Zeichen in Fettdruck und in umgekehrter Reihenfolge enthält, und die nächste Eingabeaufforderung am Anfang der nächsten Zeile ausgegeben wird :
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Dies geschieht durch Ausgabe des umgekehrten Videos %
am Ende jedes Befehls (vor jeder Eingabeaufforderung), gefolgt von 79 Leerzeichen (vorausgesetzt, ein 80 Zeichen breites Terminal), einem CR-Zeichen (das Zeichen, das den Cursor veranlasst, zum ersten zurückzukehren) Spalte) und die zu löschende Sequenz bis zum Ende der Zeile (und dann der Eingabeaufforderung).
Auf diese Weise wird der Cursor bei einer nicht abgeschlossenen Zeile, da sich der Cursor nicht an der ersten Position befindet, mit diesen 80 Zeichen in die nächste Zeile verschoben (und diese %
bleibt erhalten). Wenn nicht, dann stehen das %
und diese 79 Leerzeichen in einer Zeile, die anschließend gelöscht wird.
Das funktioniert jetzt nur, wenn das Terminal Zeilenumbrüche vornimmt (was zum Beispiel danach nicht mehr richtig funktioniert tput rmam
). Wenn Sie über ein langsames Terminal verfügen (wie bei einer seriellen 9600-Baud-Leitung), werden diese möglicherweise %
nach jedem Befehl angezeigt und entfernt, sodass zsh
Sie diese Funktion deaktivieren können:
unsetopt prompt_cr prompt_sp
Auf diese Weise zsh
verhält sich eher wie traditionelle Muscheln.
Sie können diese Markierung auch mit der $PROMPT_EOL_MARK
Variablen ändern .
print -n "this is a test"
dannprint "this is a test"