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 '$'.
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í.
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 \[ ... \].
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 '$'):
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.
@ 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.
TERM
variable de entorno establecida en? Para la consola Cygwin, debe sercygwin
.Respuestas:
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:
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í.
fuente
-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.Para mí, la solución fue agregar las siguientes líneas a .bashrc:
Tenga en cuenta que los caracteres no imprimibles en la solicitud deben incluirse en
\[
...\]
.fuente
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 '$'):
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.
fuente
Según lo comentado por dregad y ak2 , ajuste
export TERM=cygwin
en mi~/.bashrc
archivo fue suficiente para solucionar este problema para mí.fuente
@ 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 unakillpg(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.fuente
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).
fuente
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.
fuente