
Bei mir tritt ein seltsames Verhalten auf, das eine Kombination aus zsh und vielleicht urxvt (?) zu sein scheint. Mein Setup ist folgendes: Ich beginne urxvt -e 'tmux'
damit, mir ein Terminal zu besorgen, das zsh
als Standard-Shell gestartet wird.
Ich habe dann mit der Anpassung begonnen $PROMPT
und derzeit sieht es so aus:
zstyle ':vcs_info:*' enable git svn hg bzr
zstyle ':vcs_info:*' formats $' \e[0;33m(%s:%b)\e[0m'
precmd () { vcs_info }
PROMPT+=$'\e[0;31m%n\e[0m'
PROMPT+="@"
PROMPT+=$'\e[0;34m%m\e[0m'
PROMPT+=":"
PROMPT+=$'\e[0;36m%3c\e[0m'
PROMPT+=$'\e[0;33m%c\e[0m'
PROMPT+='${vcs_info_msg_0_}'
export PROMPT
Möglicherweise fällt Ihnen die zweite %c
Zeile auf; diese dient natürlich zu Testzwecken.
Das normale Verhalten einer Eingabeaufforderung besteht darin, nach dem Drücken der Eingabetaste eine neue Zeile zu erstellen und optional den vorhandenen Befehl auszuführen. Anschließend wird eine neue Zeile gedruckt. Unter bestimmten Umständen stelle ich jedoch ein anderes Verhalten fest: Wenn ich die Eingabetaste drücke, wird der Befehl ausgeführt und die Ausgabe angezeigt.JedochWenn sich die vorherige Eingabeaufforderung nicht oben im Terminal befand, wird die letzte Zeile der vorherigen Ausgabe überschrieben, da die gesamte neue Ausgabe eine Zeile nach oben verschoben wird.
Vielleicht ist ein Beispiel angebracht. Beginnen Sie mit einem leeren Terminal und einer neuen Eingabeaufforderung:
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Nun geben wir ls -la
in dieses Verzeichnis ein (Beispielausgabe):
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Beachten Sie, dass etwas fehlt, da sich .git
hier in Wirklichkeit ein Verzeichnis befindet:
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .git
Was hier passiert ist, lässt sich leicht beschreiben: Die Befehlsausgabe wird korrekt generiert, aber dann wird die Eingabeaufforderungszeile um eine Zeile nach oben verschoben und überschreibt die letzte Ausgabezeile. Wenn ich das also noch einmal mache, sieht meine Ausgabe folgendermaßen aus:
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)
Wie Sie sehen, wurde alles noch einmal nach oben verschoben, wobei diesmal das ..
aus der letzten Ausgabe und das .git
aus dieser Ausgabe ersetzt wurden.
Dies passiert jedoch nicht bei allen Setups. Es passiert nur, wenn das Fenster zu schmal ist. Ich habe dies zusätzlich getestet, indem ich die Größe des geöffneten urxvt-Fensters mit zsh darin geändert habe. Wenn ich es zu schmal mache. Soweit ich sehe, beginnt es, sobald die Eingabeaufforderung etwa zwei Drittel der Fensterbreite einnimmt. Ich weiß jedoch nichtWarumdies passiert bei dieser Gelegenheit.
Einige Hinweise: - Dies geschieht nicht mit Bash (auch wenn die Eingabeaufforderung selbst mehrzeilig ist) - RPROMPT
und RPROMPT2
leer ist - Es scheint nicht von der Art der angezeigten Informationen abzuhängen (d. h. das Deaktivieren vcs_info
hilft nur, wenn die Eingabeaufforderung wieder kurz genug wird) - Dies geschieht nicht, wenn die Eingabeaufforderung mehrzeilig ist (und die zweite Zeile die Zwei-Drittel-Marke nicht erreicht) - Dies geschieht nicht in einer Konsole (tty), jedoch mit xtermUndurxvt.
Zusammenfassung: Meine Zsh-Eingabeaufforderung bewegt sich nach oben, wenn die Eingabeaufforderungszeile etwa zwei Drittel des Fensters lang ist.
Antwort1
Ich scheine es behoben zu haben, indem ich %{fg[color]%}
anstelle der Bash-Farbcodes verwendet habe (natürlich muss ich dafür das Farbmodul laden).