Cygwin bash prompt está ajustando líneas en la misma línea


46

Estoy usando Cygwin bash prompt, y para comandos largos, el texto se ajustará a la misma línea en lugar de ir a la siguiente línea a pesar de configurar mi PS1 como simplemente '$'.

Aquí hay una captura de pantalla,
screenshot


9
Cual es el TERM variable de entorno establecida en? Para la consola Cygwin, debe ser cygwin.
ak2

1
@ ak2 esto me solucionó el problema, gracias. Cygwin en Mintty.
JoshuaD

Respuestas:


51

Ya estaba usando MinTTY, y eliminar la nueva línea en PS1 tampoco ayudó. Un consejo en esta página ayudo Ejecuté este comando de bash:

kill -WINCH $$

En mi caso, ejecutar esto una vez solucionado el problema, incluso después de cerrar la sesión y volver a iniciarla. No estoy seguro de que siempre sea así.


1
A juzgar por -WINCH, esto indica al proceso de bash que la ventana del terminal fue redimensionada. Así que esto debería hacerse después del tamaño de cada ventana de terminal, supongo.
ivan_pozdeev

7
@ivan_pozdeev, acabo de encontrar que solo tienes que hacer esto si cambias el tamaño mientras vim está abierto: vim recibe la señal y vuelve a dibujar en el nuevo tamaño, pero no pasa al proceso principal y, por lo tanto, Bash aún piensa que el tamaño del La pantalla es lo que era cuando vim abrió.
akatakritos

esto también funcionó para mí
konqui

Esto también funcionó para mí, gracias @jtpereyda!
Jason R. Mick

Gracias, este fue definitivamente el problema para mí: cambiar el tamaño del terminal mientras estaba en vim. Siento que debería ser lo suficientemente fácil para corregir este error pero no lo sé.
Iguananaut

15

Para mí, la solución fue agregar las siguientes líneas a .bashrc:

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

Tenga en cuenta que los caracteres no imprimibles en la solicitud deben incluirse en \[ ... \].


5
Como lo mencionó @ ak2 en un comentario en la pregunta original, exportar TERM = cygwin es suficiente para solucionar el problema.
dregad

1
No fue suficiente en mi caso. si PS1 contiene secuencias de escape que no están encerradas en \ [... \], el problema de ajuste persistirá. establecer la variable TERM env puede ser suficiente en su caso, pero lo dudo.
digory doo

Para mí, esto soluciona el problema de que la segunda línea sobrescribe la primera línea, sin embargo, a menos que use exactamente el terminal de ancho 80, la posición del cursor y el desplazamiento del texto siguen siendo difíciles (usando cygwin64, mintty 2.3.7)
M.M

8

También tuve el mismo problema con MinTTY. El problema probablemente tenga algo que ver con el indicador primario (PS1).

La solución para mí fue eliminar el último carácter de 'nueva línea' de PS1 (justo antes del signo '$'):

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 ~ $

ver http://cygwin.com/ml/cygwin/2001-07/msg00140.html para referencia.

Para hacer este cambio persistente, agregue     export PS1 = '[\ e] 0; \ w \ a] \ n [\ e [32m] \ u @ \ h [\ e [33m] \ w [\ e [0m] \ $' a su archivo ~ / .bashrc.


1
No funciono para mi ...
HDave

Esto me funcionó, pero además de eliminar la última nueva línea, también tuve que reiniciar el terminal de Cygwin.
christosc

4

Según lo comentado por dregad y ak2 , ajuste export TERM=cygwin en mi ~/.bashrc archivo fue suficiente para solucionar este problema para mí.


3

@ jtpereyda's responder Está ciertamente en la marca. Pero por alguna razón no pude dejar pasar esto, y cavé un poco más profundo.

Ampliando en este comentario , si cambia el tamaño del terminal mientras está en vim (o cualquier otra aplicación de pantalla completa que tome el control del tty fuera del shell), el SIGWINCH es seguido no enviado al shell, por lo que cuando recupera el control, no sabe que el terminal ha sido redimensionado.

Cuando cambie el tamaño de su terminal debería llamar ioctl(..., TIOCSWINSZ, ...) en la parte maestra en la que se está ejecutando vim. Esto a su vez da como resultado una killpg(SIGWINCH) en el grupo de proceso de vim.

El problema es que vim se ejecuta en su propio grupo de procesos distinto del shell desde el que se ejecutó, por lo que el shell bash no recibe el SIGWINCH y no ajusta sus líneas / columnas adecuadamente.

Si desea una solución permanente, agregue shopt -s checkwinsize para usted .bashrc. Eso hace que bash verifique el tamaño de la ventana ( ioctl(..., TIOCGWINSZ, ..) ) después de regresar de cada comando, y actualizar sus líneas / columnas.


¿Qué voy a hacer con la pregunta? OP no está utilizando vim.
DavidPostill

Quise referirme a una pregunta diferente que creo que hizo la conexión más obvia, pero en resumen, una posible causa del problema del OP es abrir una aplicación de terminal completa como vim, cambiar el tamaño del terminal y luego salir. Como expliqué, el shell no ve el SIGWINCH, por lo que al salir de vim todavía cree que el terminal tiene el tamaño anterior, lo que genera varios problemas de ajuste de línea.
Iguananaut


2

Algo está roto en la configuración de su terminal (probablemente).
Supongo que ya habrías intentado salir de esa sesión y reiniciar una nueva.

Si bien no obtiene una solución para el terminal de Cygwin, dé MinTTY un intento (en realidad es mejor).


1
Veo este problema en Cygwin en varias máquinas, pero MinTTY se ve mejor y resuelve el problema de ajuste. ¡Dos pájaros con una piedra!
wting

Tenga en cuenta que MinTTY es el terminal predeterminado para Cygwin desde finales de 2011 .
Hugh W

0

Según lo comentado por Akatakritos , probablemente redimensionaste tu terminal mientras vim estaba abierto.

Cuando esto sucede, simplemente redimensiona el terminal una vez más y el problema desaparece.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.