2013-07-02 15 views
11

Wenn ich meint die Eingabeaufforderung wie:Hinzufügen bei Abrufen/Editier-Befehle

export PS1='\033[0;33m[\[email protected]\h \w]\$ \033[00m' 

Die Farbe der prompt gelb sein und alles nach dem " $ 'Zeichen wird die Standard-Terminalfarbe sein. Das ist, was ich erwarte. Wenn ich jedoch eine Befehlszeile abrufe und versuche, sie zu bearbeiten, verschiebe den Cursor - entweder UpArrow/Ctrl-A (setze -o emacs) oder ESC K (setze -o vi) , wenn die Befehlszeile ich versuche edit ist lang genug, der Cursor steht nicht am Anfang des Befehls. Wenn Sie Strg-A (set -o emacs) oder^(set -o vi) eingeben, wird der Cursor nicht auf den Anfang der abgerufenen Zeile auf dem Bildschirm verschoben. Wenn Sie versuchen, den Cursor an das Ende der Zeile zu positionieren (Strg-E oder $, abhängig), wird der Cursor mehrere Zeichen nach dem Ende der Zeile platziert. Es sieht so aus, als ob Bash durch die Escape-Zeichen, die ich der Eingabeaufforderung hinzugefügt habe, verwirrt wird. Ist das nur etwas, mit dem ich mich befassen muss, meine Eingabeaufforderung zu einer monochromen ändern, wenn ich zurückgerufene Zeilen bearbeiten möchte, oder gibt es eine Möglichkeit, bash zu veranlassen, die Bearbeitung von zurückgerufenen Befehlen mit einer bunten Eingabeaufforderung korrekt zuzulassen?

Antwort

17

Sie müssen die nicht druckbare Zeichen in \[ ... \] so umschließen, dass bash weiß, sie zu ignorieren, wenn die Länge der Eingabeaufforderung Berechnung:

export PS1='\[\033[0;33m\][\[email protected]\h \w]\$ \[\033[00m\]' 
+0

Nun, die sicherlich einfach genug war - dank – Xaq