Comportamiento extraño en la Terminal con .bash_profile personalizado

8

Es difícil describir el comportamiento, pero aquí hay un breve clip:

http://www.youtube.com/watch?v=9KqHBA94FPI

Básicamente, al ingresar comandos de varias líneas, al final de la primera línea, el bloque de inserción vuelve al inicio de la primera línea, escribe sobre la primera línea, luego continúa de manera normal en las líneas segunda, tercera, etc. . Al eliminar, me permite eliminar todo el comando, más los espacios en blanco en la línea sobre el comando (lo tengo configurado para que los comandos se inserten después de una línea que contiene la información del usuario @ host / Directorio. Incluso me permite eliminar el comando última parte del Directorio y host que describí anteriormente. Lo siento, soy terrible al explicar esto, el video hará un mejor trabajo.

Aquí está el contenido de mi .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "
Blair Beckwith
fuente

Respuestas:

12

Debe rodear los caracteres que no se imprimen (en este caso, sus secuencias de escape ANSI) con secuencias de escape bash: \[y \]. De esa manera bash sabrá que los caracteres encerrados no son visibles, es decir. no ocupan espacio, es decir. no deben incluirse en el cálculo de longitud de palabra utilizado por el reiniciador de línea.

en otras palabras, cambia tu PS1definición:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… a:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

Y aquí está el mismo PS1valor, solo para lectura humana, con una legibilidad quizás mejorada (escapes ANSI en la fila inferior, escapes bash en el medio e impresión de caracteres en la fila superior).

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Otras lecturas:

Jari Keinänen
fuente
Esto es perfecto, resolvió mi problema. ¡Muchas gracias por la ayuda!
Blair Beckwith
Blair, bienvenido a Ask Different! Si desea una respuesta a su pregunta, vote por favor y acéptela.
nohillside
0

Yo todos

Tuve problemas similares y encontré una solución simplemente cambiando mi variable PS1 de la original a una muy simple, solo mi nombre en realidad: export PS1 = Alex

Ahora mi terminal ya no tiene ningún comportamiento extraño.

Espero que te ayude.

Alex (en Mac Lion 10.8)

usuario43414
fuente