Red de conocimiento informático - Conocimiento sistemático - Comprensión profunda de la configuración de codificación vim

Comprensión profunda de la configuración de codificación vim

El entorno de uso de vim es relativamente complejo. Se puede usar localmente a través de una terminal (como un host Mac o Linux), también puede usar SSH para conectarse a un servidor remoto o puede usar gvim.

Aquí analizamos principalmente el uso en la terminal. Hemos aclarado que la configuración de codificación de vim en la terminal es relativamente simple, por lo que, naturalmente, la entendemos.

En primer lugar, debemos comprender la diferencia. entre caracteres y bytes se utilizan para mostrar, y los bytes se utilizan para el almacenamiento y la transmisión. La transmisión de red es un flujo de bytes, y los archivos también se almacenan en un flujo de bytes para mostrar el contenido del archivo. caracteres para visualización. Caracteres y bytes La relación entre ellos se puede definir de la siguiente manera

Se puede ver que codificar y decodificar son un par de operaciones inversas. Ambas necesitan especificar el esquema de codificación. el esquema es inconsistente, la operación fallará

Operar a través de la terminal Cuando se usa vim remoto, la dirección del flujo de datos se puede expresar de la siguiente manera

En esta dirección del flujo, solo la terminal y vim necesitan muestra caracteres y otros procesos o servicios solo transmiten datos. Si solo transfiere datos binarios, no es necesario codificar y decodificar solo cuando se muestran los caracteres, por lo que solo el terminal y vim necesitan configurar la codificación. Mientras que el terminal necesita lidiar con el shell local, el vim remoto también necesita lidiar con el shell, y la codificación del shell también es crucial

El terminal en sí también es un proceso que necesita la visualización de caracteres finales. para ser completado por el terminal Los caracteres que ingresamos en el terminal también serán codificados y luego transmitidos. En términos simples,

Aquí está el código. El esquema de decodificación es lo que el terminal necesita configurar.

El comando local también puede ver la configuración de codificación del shell. Los esquemas de codificación que comienzan con LC_ representan diferentes tipos de esquemas de codificación en el sistema, que se dividen en las siguientes categorías

En cuanto al final, Cuál. planea elegir, su prioridad es la siguiente

Es decir, todo se basa en LC_ALL Si no hay configuración, busque el elemento de configuración correspondiente a LC_*. use la configuración de LANG para afectar los caracteres. Se muestra el elemento LC_CTYPE. Para facilitar la descripción, cuando se mencione la codificación del shell más adelante, siempre se hará referencia al elemento LC_ALL. El método de codificación del shell se establece de la siguiente manera. >

Supongamos que la codificación de nuestro terminal local está configurada en UTF-8 y la codificación del shell está configurada en GBK. Cuando ingresamos caracteres chinos en el terminal, se mostrarán como caracteres confusos o no se mostrarán

Analicemos la interacción de datos al ingresar comandos de shell en el terminal

Piense en el terminal y el shell como dos servicios que necesitan interactuar entre sí, codificando al enviar datos y decodificando al recibir datos si el esquema de codificación. y el esquema de decodificación son inconsistentes, causará caracteres confusos o fallas. El formulario es ingresar chino en la terminal. Se mostrará una excepción durante el comando y el resultado de la ejecución no es el esperado.

Si usa ssh para iniciar sesión en el shell remoto, la configuración de codificación del shell remoto es consistente con el shell local. Puede imprimir lo que hizo ssh durante el proceso de inicio de sesión a través de ssh -v. Entonces nuestro primer punto es

Hay 4 configuraciones relacionadas con vim y codificación

Se puede ver que las configuraciones de codificación de vim son bastante complicadas, analicemos el papel de estas codificaciones. configuraciones con ejemplos específicos

Ya sea que abramos vim local o vim remoto, primero nos aseguramos de que la configuración de codificación del shell local sea consistente con la del terminal, lo que implica el flujo de datos de codificación y decodificación.

Vim abre el archivo y finalmente lo muestra en el terminal. Este proceso está relacionado con la configuración de codificación.

Se puede ver que vim tiene mucha codificación en el proceso. Al abrir el archivo y mostrarlo, los pasos para convertir el binario de la codificación A a la codificación B son:

La salida final sigue siendo un flujo de bytes. Si A y B son diferentes, el flujo de bytes de salida. es diferente de la entrada (bytes ascii Excepto las secuencias, las secuencias de bytes correspondientes a los caracteres ASCII son las mismas en todos los esquemas de codificación).

El requisito previo para una conversión exitosa es que el esquema de codificación utilizado en la decodificación debe ser coherente con el esquema de codificación del flujo de bytes de entrada. Es decir, si el flujo de bytes de entrada se genera utilizando el esquema de codificación C, la decodificación utilizando el esquema de codificación A fallará.

Si algunos elementos de codificación de vim no están configurados, se utilizarán las configuraciones de sus dependencias o la configuración predeterminada. Las dependencias son las siguientes

En estas configuraciones de codificación de vim, generalmente usamos. solo configure codificaciones de archivos y codificación. Si solo se usa en entornos chino e inglés, se puede configurar de la siguiente manera

la codificación debe configurarse en utf8, porque utf8 puede representar todos los caracteres

. Supongamos que la codificación del terminal está configurada en gbk y la codificación de vim es utf8. En este momento abrimos un archivo, no importa si el archivo está codificado en utf8 o gbk, no se puede mostrar normalmente

Como se mencionó Anteriormente, la codificación de termen de vim heredará la configuración de codificación de forma predeterminada, y los pasos correspondientes para abrir el archivo son los siguientes

Si desea mostrarlo normalmente, solo necesita modificar temporalmente la codificación de termencoding de vim a Sea coherente con la codificación del terminal. La codificación de términos solo implica visualización y no implica cambios en el contenido del archivo. Para ser precisos, no intente modificar la configuración de codificación en ningún momento. Por lo tanto, nuestro segundo punto es

Si el flujo de datos para abrir un archivo es de vim a la terminal, entonces la modificación del archivo es desde Va y viene de la terminal a vim y luego a la terminal

Los pasos relacionados con la codificación son los siguientes. El proceso de abrir el archivo para su visualización se describió anteriormente. Aquí solo hablamos del proceso de modificación y guardado

la codificación de archivos tiene dos situaciones

<. p> Como se puede ver en lo anterior, los datos codificados por el esquema de codificación son una estación de transferencia en vim. Cuando se reciben los datos (leídos del archivo o ingresados ​​desde el terminal), se deben convertir al esquema de codificación y el. archivo guardado Luego, el esquema de codificación de codificación se convierte en el esquema de codificación de codificación de archivos. Por lo tanto, la codificación debe establecerse en un esquema de codificación que pueda representar todos los caracteres. Por lo general, lo configuramos en utf8

Supongamos que la configuración de codificación del terminal y el shell son gbk y la configuración de codificación de vim. es utf8. Si desea ingresar y mostrar caracteres, la configuración de codificación de términos debe ser consistente con la codificación del terminal. Esto significa que ya sea que muestre caracteres o ingrese caracteres para guardar archivos, puede funcionar normalmente.

Podemos configurar la codificación para que sea inconsistente solo para demostrar el impacto de la codificación en el entorno real. Debes asegurarte de que estas configuraciones de codificación sean consistentes, por lo que el punto final es

.