GNU/Linux >> Tutoriales Linux >  >> Linux

¿Primeros caracteres del comando repetidos en la pantalla al completar?

Los primeros dos caracteres se repitieron mientras uso Tab para hacer la terminación. En la siguiente captura de pantalla, cd se repite.

He probado rxvt-unicdoe, xterm, terminator. Todos estos emuladores de terminal tienen este problema.

Zsh versión 5.0.2, archivo de configuración en mi zsh

Respuesta aceptada:

Si los caracteres en su línea de comando a veces se muestran con un desplazamiento, a menudo esto se debe a que zsh calculó el ancho incorrecto para el mensaje. Los síntomas son que la pantalla se ve bien mientras agrega caracteres o mueve carácter por carácter, pero se distorsiona (algunos caracteres aparecen más a la derecha de lo que deberían) cuando usa otros comandos que mueven el cursor (Inicio , finalización, etc.) o cuando el comando se superpone a una segunda línea.

Zsh necesita saber el ancho del indicador para saber dónde se colocan los caracteres del comando. Asume que cada personaje ocupa una posición a menos que se indique lo contrario.

Una posibilidad es que su aviso contenga secuencias de escape que no están debidamente delimitados. 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 de porcentaje %{…%} . Más generalmente, 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 aviso (PS1 , PROMPT , o las variables a las que hacen referencia) y asegúrese de que todas las secuencias de escape (como \e[…m para cambiar los atributos de texto:tenga en cuenta que puede estar presente a través de alguna variable como $fg[red] ) están dentro de %{…%} . Ya que 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. Hay secuencias de ancho cero en un indicador que deben encerrarse en \[…\] .

Otra posibilidad es que su indicador contenga caracteres que no sean ASCII y que zsh (o cualquier otra aplicación) y su terminal tengan una idea diferente de qué tan anchos son. Esto puede suceder si hay una desigualdad entre la codificación de su terminal y la codificación que se declara en el shell, y las dos codificaciones dan como resultado anchos diferentes para ciertas secuencias de bytes. Por lo general, es posible que se encuentre con este problema cuando utilice un terminal que no sea Unicode pero declare una configuración regional Unicode o viceversa.

Las aplicaciones se basan en variables de entorno para conocer la configuración regional; la configuración relevante es LC_CTYPE , que se determina a partir de las variables de entorno LANGUAGE , LC_ALL , LC_CTYPE y LANG (se aplica el primero de ellos que se establezca). El comando locale | grep LC_CTYPE le dice su configuración actual. Por lo general, la mejor manera de evitar problemas de configuración regional es dejar que el emulador de terminal configure LC_CTYPE , ya que sabe qué codificación espera; pero si eso no funciona para usted, asegúrese de configurar LC_CTYPE .

Los mismos síntomas pueden ocurrir cuando el comando anterior mostró algún resultado que no terminó 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.

Relacionado:¿Redireccionamiento de IO y el comando principal?

Si una línea no se muestra correctamente, el comando redisplay o clear-screen (vinculado a Ctrl +L por defecto) lo arreglará.


Linux
  1. comando linux ls

  2. ¿Cómo cambiar rápidamente la primera palabra en un comando Bash?

  3. ¿Cómo redirigir la salida de un comando a un archivo cuando el comando solicitará las entradas del usuario?

  4. ¿Cómo capturar la primera dirección IP de un comando ifconfig?

  5. Reemplazar todos los caracteres excepto los primeros cuatro caracteres

Cómo usar el comando de nombre de host en Linux

Marque los comandos de Linux para una invocación repetida más fácil

¿A dónde van los archivos cuando se emite el comando Rm?

¿Cómo se interpreta el comodín * como un comando?

¿Cambiar el color del texto de la salida en el símbolo del sistema?

Usando el comando tr en Linux para jugar con personajes