Dziwne zachowanie w Terminalu z niestandardowym profilem .bash

8

Trudno opisać to zachowanie, ale oto krótki klip:

http://www.youtube.com/watch?v=9KqHBA94FPI

Zasadniczo, podczas wprowadzania poleceń wieloliniowych, na końcu pierwszego wiersza blok wstawiania wraca na początek pierwszego wiersza, zapisuje nad pierwszym wierszem, a następnie kontynuuje normalnie do drugiego, trzeciego itd. Wiersza . Podczas usuwania pozwala mi usunąć całe polecenie oraz puste spacje w wierszu nad poleceniem (Mam to skonfigurowane, aby polecenia były wstawiane po wierszu zawierającym informacje o użytkowniku @ hoście / katalogu. To nawet pozwala mi usunąć ostatnia część katalogu i hosta, które opisałem powyżej. Przepraszam, że jestem okropny w wyjaśnianiu tego, wideo zrobi lepszą robotę.

Oto zawartość mojego pliku .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "
Blair Beckwith
źródło

Odpowiedzi:

12

Powinieneś otoczyć swoje niedrukowalne znaki (w tym przypadku sekwencje specjalne ANSI) sekwencjami ucieczki bash: \[i \]. W ten sposób bash będzie wiedział, że zamknięte znaki nie są widoczne, tj. nie zajmują miejsca, tj. nie powinny być uwzględniane w obliczeniu długości słowa stosowanym przez opakowanie linii.

innymi słowy zmień PS1definicję:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… do:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

A oto ta sama PS1wartość, tylko do czytania przez ludzi, z być może poprawioną czytelnością (znaki ucieczki ANSI w dolnym rzędzie, znaki bash uciekają w środku, a znaki drukują w górnym rzędzie).

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Dalsza lektura:

Jari Keinänen
źródło
To jest idealne, rozwiązałem mój problem. Wielkie dzięki za pomoc!
Blair Beckwith,
Blair, witaj w Ask Different! Jeśli podoba Ci się odpowiedź na twoje pytanie, proszę zagłosuj i zaakceptuj ją.
nohillside
0

Ja wszyscy

Miałem podobne problemy i znalazłem rozwiązanie, zmieniając moją zmienną PS1 z pierwotnej na bardzo prostą, tak naprawdę moje imię: eksport PS1 = Alex

Teraz mój terminal nie ma już żadnych dziwnych zachowań.

Mam nadzieję, że to pomoże.

Alex (na Mac Lion 10.8)

użytkownik43414
źródło