2013-07-02 23 views
11

Se ho impostato il mio prompt dei comandi come:L'aggiunta di sequenze di colori ANSI escape per una festa di risultati immediati in posizione del cursore male quando richiamano/comandi di modifica

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

Il colore del prompt sarà giallo e tutto ciò dopo il ' $ 'carattere sarà essere il colore del terminale predefinito. Questo è quello che mi aspetto. Tuttavia, se richiamo una riga di comando e tento di modificarla, spostando il cursore - UpArrow/Ctrl-A (set -o emacs) o ESC K (set -o vi) se la riga di comando che sto cercando di la modifica è abbastanza lunga, il cursore non è posizionato all'inizio del comando. Digitando Ctrl-A (set -o emacs) o^(set -o vi) non si sposterà il cursore su ciò che sto vedendo come l'inizio della linea richiamata sullo schermo. Allo stesso modo, il tentativo di posizionare il cursore alla fine della riga (Ctrl-E o $, a seconda della versione) comporta il posizionamento di diversi caratteri oltre quella che sembra essere la fine della linea. Sembra che bash si stia confondendo con i caratteri di escape che ho aggiunto al prompt. E 'solo questo qualcosa che dovrò affrontare, cambiando il mio prompt in uno monocromatico quando desidero modificare le linee richiamate, o c'è un modo per ottenere bash per consentire correttamente la modifica dei comandi richiamati con un prompt colorato?

risposta

17

È necessario racchiudere i caratteri non stampabili in modo che \[ ... \]bash sa di ignorarli quando si calcola la lunghezza del messaggio:

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

Bene che era certamente abbastanza semplice - grazie – Xaq