¿Cómo puedo configurar la codificación predeterminada de VIM en UTF-8?

62

Me gustaría contribuir a un proyecto de código abierto que proporcione cadenas traducidas. Uno de sus requisitos es que los contribuyentes deben usar UTF-8 como codificación para los archivos PO.

Estoy usando VIM 7.3 en Linux. ¿Cómo puedo estar seguro de que la codificación de VIM está configurada en UTF-8, para poder editar y guardar el archivo .po de la manera correcta?

Paolo
fuente

Respuestas:

64

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-8y reinicie Vim.

O, en su lugar, configure la LANGvariable 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 LANGpara 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 fileencodingsopció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 .

MetaEd
fuente
3
En realidad parece que ni siquiera tengo que molestarme en editar .vimrc; de hecho, el valor predeterminado de la codificación es "latin1" o el valor de $ LANG, que en mi sistema está configurado como en_US.UTF-8. Por esta razón se :set encodingentrega encoding=utf-8fuera de la caja. Como se esperaba, si LANG no está configurado, :set encodingda encoding=latin1. ¡Gracias por la gran respuesta!
Paolo
Eso podría ser generalmente útil, así que lo he agregado a la respuesta.
MetaEd
Si abre un archivo que está codificado como latin1, ¿esta configuración no cambiará la codificación del archivo? ¿Cómo puede hacer que Vim mantenga intacta la codificación de un archivo pero prefiera utf-8 para archivos nuevos?
David Kennedy
@DaveKennedy Vim puede tratar el archivo como Latin-1 solo cuando el archivo es inequívocamente Latin-1. Cuando la codificación es ambigua, Vim tiene que elegir. Por ejemplo, un archivo que contiene solo códigos ASCII de 7 bits es Latin1 válido pero también es UTF-8 válido y otros. Tal archivo normalmente se tratará como UTF-8. Una forma de evitar este resultado es hacer que la codificación del archivo sea inequívoca. El truco que he visto es agregar una cadena de códigos 0xF7. En UTF-8, 0xF7 no es válido. Pero en latín-1, representa el signo de división (÷). Vim normalmente concluirá que el archivo es Latin-1.
MetaEd
4

Según vimdoc, vim intenta detectar automáticamente la codificación del archivo, por lo que si está editando archivos existentes , debería ser bueno.

Siempre puede forzar la codificación si lo desea con :set fileencodings=utf-8. Puede encontrar la documentación aquí .

Señor shunz
fuente
66
fileencodings = utf-8 hará que Vim reconozca el archivo de entrada como UTF-8 pero luego realice una conversión con pérdida a Latin-1. Además, hará que Vim no reconozca UTF-16. La mejor solución es establecer encoding = utf-8, que convierte a Vim de un editor nativo de un byte en un editor multibyte nativo.
MetaEd
@MetaEd, ¿puedes responder esto para elaborar tu comentario :)
Hhh