2013-07-02 5 views
11

Jeżeli ustawić mój wiersz polecenia jak:Dodawanie sekwencje kolorów ANSI uciec do bash szybkich rezultatów w złej pozycji kursora podczas przypominając/edycja poleceń

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

Kolor wierszu będzie żółty i wszystko po ' Znak $ będzie być domyślnym kolorem terminala. Tego się spodziewam. Jeśli jednak wywołasz wiersz polecenia i spróbuję go edytować, przesuń kursor - UpArrow/Ctrl-A (set -o emacs) lub ESC K (set -o vi) , jeśli wiersz poleceń próbuję użyć edycja jest wystarczająco długa, kursor nie znajduje się na początku polecenia. Wpisanie Ctrl-A (set -o emacs) lub^(set -o vi) nie przesunie kursora do tego, co widzę jako początek przywoływanej linii na ekranie. Podobnie, próba ustawienia kursora na końcu linii (Ctrl-E lub $, zależnie od tego) powoduje, że umieszcza się kilka znaków za tym, co wydaje się być końcem linii. Wygląda na to, że bash jest zdezorientowany znakami ucieczki, które dodałem do znaku zachęty. Czy to jest coś, z czym będę musiał sobie poradzić, zmieniając mój monit na monochromatyczny, gdy chcę edytować przywołane linie, czy jest sposób, aby bash poprawnie zezwolił na edycję odwołanych poleceń z kolorowym monitem?

Odpowiedz

17

Trzeba załączyć znaki zakaz drukowania w \[ ... \] tak że bash wie ignorować je przy obliczaniu długości wierszu:

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

dobrze, że był z pewnością dość prosta - dzięki – Xaq

Powiązane problemy