Si los caracteres en su línea de comando a veces se muestran en un desplazamiento, a menudo esto se debe a que zsh ha calculado el ancho incorrecto para la solicitud. Los síntomas son que la pantalla se ve bien siempre que esté agregando caracteres o moviendo carácter por carácter, pero se vuelve confusa (con algunos caracteres que aparecen más a la derecha de lo que deberían) cuando usa otros comandos que mueven el cursor ( Home, finalización, etc. ) o cuando el comando se superpone a una segunda línea.
Zsh necesita conocer el ancho de la solicitud para saber dónde se ubican los caracteres del comando. Se supone que cada personaje ocupa una posición a menos que se le indique lo contrario.
Una posibilidad es que su solicitud contenga secuencias de escape que no estén delimitadas correctamente. Las secuencias de escape que cambian el color u otros aspectos de formato del texto, o que cambian el título de la ventana u otros efectos, tienen un ancho cero. Deben incluirse dentro de una construcción de llaves porcentuales%{…%}
. En términos más generales, una secuencia de escape como %42{…%}
le dice a zsh que asuma que lo que está dentro de las llaves tiene 42 caracteres de ancho.
Por lo tanto, verifique la configuración de su solicitud ( PS1
, PROMPT
o las variables a las que hacen referencia) y asegúrese de que todas las secuencias de escape (como \e[…m
cambiar los atributos de texto, tenga en cuenta que puede estar presente a través de alguna variable como $fg[red]
) están dentro %{…%}
. Como está usando oh-my-zsh, verifique tanto su propia configuración como las definiciones que está usando de oh-my-zsh.
El mismo problema surge en bash. Allí, las secuencias de ancho cero en una solicitud deben incluirse \[…\]
.
Otra posibilidad es que su solicitud contenga caracteres no ASCII y que zsh (o cualquier otra aplicación) y su terminal tengan una idea diferente de cuán anchos son. Esto puede suceder si hay una falta de coincidencia entre la codificación de su terminal y la codificación que se declara en el shell, y las dos codificaciones resultan en anchos diferentes para ciertas secuencias de bytes. Por lo general, puede encontrarse con este problema cuando utiliza un terminal que no es Unicode pero declara una configuración regional Unicode o viceversa.
Las aplicaciones se basan en variables de entorno para conocer la configuración regional; el ajuste relevante es LC_CTYPE
, que se determina a partir de las variables de entorno LANGUAGE
, LC_ALL
, LC_CTYPE
y LANG
(el primero de estos que es conjunto se aplica). El comando locale | grep LC_CTYPE
te dice tu configuración actual. Por lo general, la mejor manera de evitar problemas locales es dejar que se establezca el emulador de terminal LC_CTYPE
, ya que sabe qué codificación espera; pero si eso no funciona para usted, asegúrese de configurarlo LC_CTYPE
.
Los mismos síntomas pueden ocurrir cuando el comando anterior mostraba algún resultado que no terminaba en una nueva línea, de modo que el indicador se muestra en el medio de la línea pero el shell no se da cuenta de eso. En este caso, eso solo sucedería después de ejecutar dicho comando, no de forma persistente.
Si una línea no se muestra correctamente, el comando redisplay
o clear-screen
(vinculado a Ctrl+ Lde forma predeterminada) lo reparará.