Hier ist meine Bash-Eingabeaufforderung. Ich verwendeANSI-Escapesequenzen
reset="\033[0m";
blue="\033[38;5;20m";
cyan="\033[38;5;38m";
green="\033[38;5;35m";
yellow="\033[38;5;227m";
white="\033[38;5;250m";
# Set the terminal title to the current working directory.
PS1="\[\033]0;\w\007\]";
PS1+="\[${yellow}\]\u"; # username
PS1+="\[${white}\]@";
PS1+="\[${green}\]\h"; # host
PS1+="\[${white}\]:";
PS1+="\[${cyan}\]\W"; # working directory
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color)
export PS1;
Es sieht fantastisch aus, aber manchmal scheint das Terminal Probleme zu haben, die Länge der Eingabeaufforderung zu berechnen. Dies passiert sowohl lokal unter OSX als auch beim SSH-Zugriff auf einen Ubuntu-Server (unter OSX und unter Windows über PuTTY).
Das hier passiert zum Beispiel. Ich habe zuerst „git add [Dateiname]“ mit Tab-Vervollständigung eingegeben, dann habe ich die „Home“-Taste gedrückt, um an den Anfang der Zeile zurückzukehren und „git add“ durch „vi“ zu ersetzen. Wie Sie sehen, ist das ziemlich durcheinander.
Wenn ich dann auf „Ende“ drücke, um zum Ende der Zeile zu gelangen, lande ich außerdem weit hinter „.php“ mit mehreren Leerzeichen.
Dies passiert sowohl beim Bearbeiten einer neuen Zeile als auch beim Bearbeiten einer Zeile in meinem Verlauf (mit dem Aufwärtspfeil. Es wird korrekt angezeigt, aber sobald ich die Pfeiltasten oder Home/End verwende, passiert etwas).
Das Drücken von Strg+L zum Löschen behebt das Problem nicht. Ich muss im Grunde von vorne beginnen und die ganze Zeile erneut eingeben, um Probleme zu vermeiden.
Antwort1
Diese Linie
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
verfügt nicht über die von Bash verwendeten \[
und \]
Markierungen, die angeben, dass Spalten nicht für jedes eingeschlossene Zeichen gezählt werden sollen. Wenn nicht anders angegeben, wird davon ausgegangen, dass druckbare Zeichen gezählt werden sollen.
Zur Diskussion:
- 3.4. Nicht druckbare Zeichen in Eingabeaufforderungen(Bash-Eingabeaufforderung – Anleitung)
- Farben ändern(xterm-Handbuch)