Problem mit 256-Bit-Farbcodes in der Bash-Eingabeaufforderung

Problem mit 256-Bit-Farbcodes in der Bash-Eingabeaufforderung

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.

Bildbeschreibung hier eingeben

Wenn ich dann auf „Ende“ drücke, um zum Ende der Zeile zu gelangen, lande ich außerdem weit hinter „.php“ mit mehreren Leerzeichen.

Bildbeschreibung hier eingeben

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:

verwandte Informationen