¿Cómo puedo evitar que los comandos multilínea arruinen la posición de mi cursor cuando me desplazo por el historial?

¿Cómo puedo evitar que los comandos multilínea arruinen la posición de mi cursor cuando me desplazo por el historial?

Relacionado:¿Por qué se producen errores en mi indicador de bash cuando navego por el historial?

La historia se parece a:

 1831  git remote -v
 1832  gs 
 1833  gd 
 1834  gc -am 'moved apsum options etc to their own file
set routes to allow cors
changes to the apsum pull ' 
 1835  git push
 1836  reset
 1837  history
 1838  __git_ps1
 1839  reset
 1840  history
 1841  Kill 99894
 1842  history

g*son todos alias para los comandos de git. Cuando me desplazo por el historial, todo está bien, hasta que llego al número 1833 (el guión bajo indica la posición del cursor):

$ gd _
[ up arrow]
$ gds_
[up arrow]
$ gdit remote -v_

Pensé que era debido a los caracteres que no se imprimen en mi PS1, pero los puse entre corchetes:

PS1="\n\[$FCYN\]\$(date +%H:%M:%S) \w\[$IGreen\]\$(__git_ps1)\[$Black\] $ \[$DarkGray\]"

¿Me he perdido algo? ¿Es esto algo que sucede cuando tienes mensajes de confirmación de varias líneas?

editar: mi solución final es demasiado grande para incluirla en un comentario:

export PS1="\\n\[\033[38;5;246m\]\u@\[$(tput sgr0)\]\[\033[38;5;245m\]\h\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;28m\]\w\[$(tput sgr0)\]\[\033[38;5;15m\]\[$(tput sgr0)\]\[\033[38;5;2m\]`__git_ps1`\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;90m\]\t\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\[\033[38;5;232m\]\[$(tput sgr0)\]\[\033[38;5;15m\] \[$(tput sgr0)\]\n\[$(tput sgr0)\]\[\033[38;5;0m\]\\$\[$(tput sgr0)\] "

Lo cual parece una locura, pero produce un mensaje agradable con la rama git y colores que son fáciles de leer sobre un fondo claro (que no puedes ver aquí):

collumj@machineName ~ (dev) 17:35:42  
$ 

Muchas gracias ahttp://bashrcgenerator.com/.

Respuesta1

"Todo" está entre corchetes, pero hay varias incógnitas. Dado que la columna se desplaza hacia la derecha, eso implica que algo está enviando texto que bash no nota.

Si bien es posible que esto se deba a una discrepancia local, probablemente notaráseso.

Verificaría y me aseguraría de que su configuración no utilice la función de color de __git_ps1. De acuerdo asombreroque invoca un script llamadogit-prompt.sh, que a su vez (si lo ha configurado GIT_PS1_SHOWCOLORHINTS) puede enviar secuencias de escape que podrían confundir a bash con respecto a la columna real.

información relacionada