2009-07-15 9 views
35

Ho fatto qualcosa per interrompere il prompt della mia shell Bash nel terminale OS X (10.5.7).Numero di avvolgimento riga di prompt della shell

Questa è la PS1 che avevo configurato:

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ ' 

Per quanto mi riguarda posso dire che ho i comandi di colore fuga correttamente. Tuttavia, quando faccio scorrere verso l'alto e verso il basso nella cronologia dei miei comandi, ricevo spesso problemi con il ritorno a capo se i comandi storici si sovrappongono a più righe.

ho semplificato le mie richieste al seguente:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]' 
PS2='> ' 

E ancora vedere qualcosa del genere:

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau 
lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7 
5F5-4c91-89C4-3656F6E           export PS1="\[ 
\e[1;32m\]\h\[\e[0m\]:           cd Library/Appl 
ication\ Support/

Ho anche provato \033 invece di \e. Ho appena incluso PS2 lì per informazioni, non l'ho modificato dal default di installazione. Se rimuovo completamente i codici colore, allora tutto funziona bene, qualche idea?

+0

Che cos'è '$ TERM'? Se ricordo male, l'emulazione del terminale di Terminal.app non corrisponde esattamente a nulla nel database terminfo, ma 'dtterm' è vicino. – ephemient

+0

Ho provato il tuo PS1 su bash 3.2.33 su Fedora8. Funziona bene con le linee lunghe anche cambiando dinamicamente la larghezza del terminale. Stampa le linee duplicate quando si cambia altezza, ma una correzione Ctrl-L quella. Potrebbe essere un bug ... – neuro

+0

@ephemient my $ TERM è 'xterm-color' – Rob

risposta

2

Problemi di avvolgimento linea in Bash non sono una novità. Consulta la Mailinglist, forse c'è ancora un altro bug in merito.

Non si può fare molto di più del tagging di caratteri non stampabili, il resto deve essere fatto dal codice di richiesta.

+0

Grazie, volevo solo confermare che ero riuscito a scappare correttamente. – Rob

1

Sembra che tu abbia correttamente sequenze di escape e racchiuse.

Una soluzione alternativa lo uso comunque per aggiungere un '\ n' alla fine. Lo trovo più chiaro e riduco ogni problema con i problemi di wrapping. La fine esatta della mia PS1 è:

'\n\[\033[0;30m\]$\[\033[0m\] 

Un ottimo howto probabilmente sapete:

Bash prompt howto

20

This stackoverflow thread sembra rilevante. Come notato da qualcuno in quel thread, lo Bash FAQ at mywiki.wooledge.org discute come quotare correttamente i codici colore nei prompt di Bash (FAQ 53) e l'invocazione corretta dei colori del terminale (FAQ 37).

+0

Uso di tput per generare i codici colore come descritto in questa domanda frequente: http: //mywiki.wooledge.org/BashFAQ/037 E il mio prompt scorre molto meglio. Tuttavia, sono anche su una nuova versione di OS X, quindi non sono sicuro di averlo risolto. – Rob

45

ora sto usando questo PS1 con buon effetto:

green=$(tput setaf 2) 
blue=$(tput setaf 4) 
bold=$(tput bold) 
reset=$(tput sgr0) 
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ " 

Scorrendo la mia cronologia dei comandi appare per gestire la linea avvolge ora. Tuttavia, nel frattempo, dal momento che questa domanda è stato chiesto ho anche aggiornato il mio OS X 10.6.3 per

+1

Grazie! Questo mi ha fatto impazzire per molto tempo. Penso che il trucco sia il tuo metodo per fare i colori. Stavo usando questo stile per i colori (questo è blu grassetto): \ e [0; 34m –

+1

Ha funzionato anche per me! Grazie –

+1

Grazie! Questo mi stava facendo impazzire. – Joshua

0

Per riferimento futuro, questo è quello che uso:

export PS1="\[\033[0;31m\][\[email protected]:\w]$\[\033[0m\] "

Questo sarebbe mostrare il mio shell come :

[[email protected]:~]$

mi aiuta a distinguere tra i siti dal vivo e dev.

+2

Cosa c'entra questo con la domanda dell'OP? –

1

Ecco il mio: è il migliore che ho trovato, ma il sito in cui ho inizialmente trovato mancava un personaggio di escape, che porta al problema del wrapping della linea. Ho armeggiato con esso e finalmente ho funzionato. Mostra le informazioni su utente, percorso e diramazione con un buon contrasto, dal punto di vista del colore.

export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$' 

Inoltre, aggiungere

GIT_PS1_SHOWDIRTYSTATE=true 

Per mostrare un marcatore quando un ramo è (esistono i cambiamenti da impegnare) "sporche"

export HISTCONTROL=ignoredups 

è utile anche per ignorare i duplicati durante lo scorrimento attraverso la storia di bash.

bind "set completion-ignore-case on" 

Aiuta anche.

Infine,

shopt -s checkwinsize 

può essere utile su OSX se i problemi persistono.

0

'shopt -s checkwinsize' funziona anche per Cygwin avvolgere problemi anche

0

Se si sta utilizzando la barra del titolo trucco "\e]2;titlebar\a", assicurarsi di sfuggire anche questo: "\[\e]2;titlebar\a\]"

1

ho notato che ci sono alcuni problemi con il posizionamento immediato del cursore anche se non ci sono caratteri speciali nella variabile di ambiente PS1 o PROMPT.

Se si stampa un file che non ha un carattere di fine riga alla fine. Confonderà il prompt.

È possibile riprodurre questo facendo:

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

e premendo il tasto più volte su e vedrete che la richiesta si confondono.

potete vedere un esempio di questo in azione:

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

In questo caso, è sufficiente premere <CTRL-C> e la richiesta tornerà alla normalità.

Si noti che ZShell non presenta questo problema.