Cuando Vim lee un archivo existente, intenta detectar la codificación del archivo. Al escribir el archivo, Vim usa la codificación de archivo que detectó (excepto cuando lo dices de manera diferente). Entonces, un archivo detectado como UTF-8 se escribe como UTF-8, un archivo detectado como Latin-1 se escribe como Latin-1, y así sucesivamente.
Por defecto, el proceso de detección es crudo. Se supondrá que cada archivo que abra con Vim es Latin-1, a menos que detecte una marca de orden de bytes Unicode en la parte superior. Será difícil editar un archivo UTF-8 sin una marca de orden de bytes porque los caracteres multibyte se mostrarán en el búfer como secuencias de caracteres en lugar de caracteres individuales.
Peor aún, Vim, por defecto, usa Latin-1 para representar el texto en el búfer. Por lo tanto, un archivo UTF-8 con una marca de orden de bytes será dañado por la conversión hacia abajo a Latin-1.
La solución es configurar Vim para usar UTF-8 internamente. De hecho, esto se recomienda en la documentación de Vim, y la única razón por la que no está configurado de esa manera es evitar crear una enorme confusión entre los usuarios que esperan que Vim funcione básicamente como un editor Latin-1.
En su .vimrc
, agregue set encoding=utf-8
y reinicie Vim.
O, en su lugar, configure la LANG
variable de entorno para indicar que UTF-8 es su codificación de caracteres preferida. Esto afectará no solo a Vim sino a cualquier software que se base LANG
para determinar cómo debe representar el texto. Por ejemplo, para indicar que el texto debe aparecer en inglés ( en
), como se habla en los Estados Unidos ( US
), codificado como UTF-8 ( utf-8
), establezca LANG=en_US.utf-8
.
Ahora Vim usará UTF-8 para representar el texto en el búfer. Además, también hará un esfuerzo más decidido para detectar la codificación UTF-8 en un archivo. Además de buscar una marca de orden de bytes, también buscará UTF-8 sin una marca de orden de bytes antes de volver a Latin-1. Por lo tanto, ya no dañará un archivo codificado en UTF-8, y debería mostrar correctamente los caracteres UTF-8 durante la sesión de edición.
Para obtener más información sobre cómo Vim detecta la codificación del archivo, consulte la
fileencodings
opción en la documentación de Vim .
Para obtener más información sobre cómo configurar la codificación que Vim usa internamente, consulte la encoding
opción .
Si necesita anular la codificación utilizada al volver a escribir un archivo en el disco, consulte la fileencoding
opción .
.vimrc
; de hecho, el valor predeterminado de la codificación es "latin1" o el valor de $ LANG, que en mi sistema está configurado comoen_US.UTF-8
. Por esta razón se:set encoding
entregaencoding=utf-8
fuera de la caja. Como se esperaba, si LANG no está configurado,:set encoding
daencoding=latin1
. ¡Gracias por la gran respuesta!