Il prompt di Basg Cygwin sta avvolgendo le linee sulla stessa linea


56

Sto usando il prompt di Basg di Cygwin e per lunghi comandi il testo andrà a capo sulla stessa riga invece di passare alla riga successiva nonostante abbia impostato la mia PS1 semplicemente su "$".

Ecco uno screenshot,
immagine dello schermo


11
Qual è la TERMvariabile di ambiente impostata su? Per la console Cygwin, dovrebbe essere cygwin.
ak2

1
@ ak2 questo ha risolto il problema per me, grazie. Cygwin su Mintty.
Giosuè,

Risposte:


58

Stavo già usando MinTTY e nemmeno rimuovere la nuova riga in PS1. Un consiglio in questa pagina ha aiutato. Ho eseguito questo comando bash:

kill -WINCH $$

Nel mio caso, eseguirlo una volta risolto il problema, anche dopo aver effettuato il logout e il login. Non sono sicuro che sia sempre così.


1
A giudicare da -WINCH, questo segnala al processo bash che la finestra del terminale è stata ridimensionata. Quindi, questo dovrebbe essere fatto dopo il ridimensionamento di ogni finestra del terminale, immagino.
ivan_pozdeev,

7
@ivan_pozdeev, ho appena scoperto che non devi fare altro che ridimensionare mentre vim è aperto: vim ottiene il segnale e ridisegna alla nuova dimensione, ma non viene passato al suo processo genitore e quindi Bash pensa ancora che la dimensione della lo schermo è quello che era quando si è aperto vim.
Akatakritos,

questo ha funzionato anche per me
konqui il

Questo ha funzionato anche per me, grazie @jtpereyda!
Jason R. Mick,

Grazie, questo è stato sicuramente il problema per me: ridimensionare il terminale mentre era in vim. Sento che dovrebbe essere abbastanza facile da risolvere questo bug ma non lo so.
Iguananaut,

22

Per me, la soluzione era aggiungere le seguenti righe a .bashrc:

PS1='\[\e[32m\]\u@\h:\W> \[\e[0m\]'
TERM=cygwin
export PS1
export TERM

Nota che i caratteri non stampabili nel prompt devono essere racchiusi in \[... \].


6
Come menzionato da @ ak2 in un commento alla domanda originale, l'esportazione TERM = cygwin è sufficiente per risolvere il problema.
Dregad,

1
non era sufficiente nel mio caso. se PS1 contiene sequenze di escape che non sono racchiuse in \ [... \], il problema di avvolgimento persisterebbe. l'impostazione della variabile env TERM può essere sufficiente nel tuo caso, ma ne dubito.
digory doo,

Per me questo risolve il problema che la seconda riga sovrascrive la prima riga, tuttavia, a meno che non utilizzi esattamente un terminale di larghezza 80, la posizione del cursore e l'offset del testo sono ancora traballanti (usando cygwin64, mintty 2.3.7)
MM

Aggiunta \ [... \] problema risolto per me.
Trismegistos,

8

Ho avuto lo stesso problema anche con MinTTY. Probabilmente il problema ha a che fare con il prompt primario (PS1).

La soluzione per me era rimuovere l'ultimo carattere "nuova riga" da PS1 (subito prima del segno "$"):

user@host ~
$ echo $PS1
\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

user@host ~
$ export PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '

user@host ~ $

vedi http://cygwin.com/ml/cygwin/2001-07/msg00140.html per riferimento.

Per rendere persistente questa modifica, aggiungi export PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ $ 'al tuo file ~ / .bashrc.


1
Non ha funzionato per me ...
HDave il

Questo ha funzionato per me, ma oltre alla rimozione dell'ultima riga ho dovuto anche riavviare il terminale Cygwin.
christosc,

5

Come commentato da dregad e ak2 , l'impostazione export TERM=cygwinnel mio ~/.bashrcfile è stata sufficiente per risolvere questo problema per me.


5

La risposta di @ jtpereyda è sicuramente nel segno. Ma per qualche motivo non potevo lasciarlo andare e ho scavato un po 'più a fondo.

Espandendo questo commento , se si ridimensiona il terminale mentre è in vim (o qualsiasi altra applicazione a schermo intero che prende il controllo del tty dalla shell), il risultato SIGWINCHspesso non viene inviato alla shell, quindi quando torna indietro non lo fa sapere che il terminale è stato ridimensionato.

Quando ridimensionate il vostro terminale, dovrebbe chiamare un ioctl(..., TIOCSWINSZ, ...)master pty in cui vim è in esecuzione. Questo a sua volta si traduce in un killpg(SIGWINCH)gruppo di processi on vim.

Il problema è che vim viene eseguito nel proprio gruppo di processi distinto dalla shell da cui è stata eseguita, quindi la shell bash non riceve la SIGWINCHe non regola le sue righe / colonne in modo appropriato.

Se desideri una soluzione temporanea permanente, aggiungi shopt -s checkwinsizea .bashrc. Ciò fa bash controllare la dimensione della finestra ( ioctl(..., TIOCGWINSZ, ..)) dopo essere tornato da ciascun comando e aggiornarne le righe / colonne.


Cosa c'entra Vim con la domanda? OP non utilizza vim.
David Post

1
Intendevo fare riferimento a una domanda diversa che, a mio avviso, ha reso la connessione più ovvia, ma in breve una possibile causa del problema del PO è l'apertura di un'applicazione terminale completa come VIM, il ridimensionamento del terminale e quindi l'uscita. Come ho spiegato, SIGWINCH non viene visto dalla shell, quindi quando esci da vim pensa ancora che il terminale abbia le dimensioni precedenti, causando vari problemi di avvolgimento della linea.
Iguananaut,


2

Qualcosa non funziona nelle impostazioni del tuo terminale (probabilmente).
Immagino che avresti già provato ad uscire da quella sessione e a riavviarne una nuova.

Anche se non ottieni una soluzione per il terminale Cygwin, prova MinTTY (in realtà è migliore).


1
Vedo questo problema in Cygwin su più macchine, ma MinTTY sembra migliore e risolve il problema del wrapping. Due piccioni con una fava!
mercoledì

Si noti che MinTTY è il terminale predefinito per Cygwin dalla fine del 2011 .
Hugh W,

1

Come commentato da Akatakritos , probabilmente hai ridimensionato il tuo terminale mentre vim era aperto.

Quando ciò accade, ridimensiona il terminale ancora una volta e il problema scompare.


grazie! anche se non sto usando Cygwin, questo ha risolto il problema del "wrapping sulla stessa linea" per me in bash - basta solo ingrandire la finestra del terminale, quindi ingrandirla di nuovo e il problema è sparito :)
Nick Humphrey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.