tutorial - Cómo configurar vim correctamente para editar en utf-8
vim linux (2)
¡En respuesta a sehe, intentaré responder mi propia pregunta! Quité las actualizaciones que hice a la pregunta original y las moví a esta respuesta. Esta es probablemente la mejor manera de hacerlo.
La respuesta:
if has("multi_byte")
if &termencoding == ""
let &termencoding = &encoding
endif
set encoding=utf-8 " better default than latin1
setglobal fileencoding=utf-8 " change default file encoding when writing new files
endif
Eliminé la línea de la bomb
porque, de acuerdo con la página de BOM Wikipedia, no es necesaria cuando se usa utf-8 y, de hecho, derrota la compatibilidad con versiones anteriores de ASCII. Siempre que ucs-bom
sea el primero en fileencodings
, vim podrá detectar y manejar archivos existentes con listas de materiales, por lo que tampoco es necesario.
fileencodings
línea fileencodings
porque no es necesaria en este caso. De los documentos de Vim : When ''encoding'' is set to a Unicode encoding, and ''fileencodings'' was not set yet, the default for ''fileencodings'' is changed.
Estoy usando setglobal filencoding
(a diferencia de set fileencoding
) porque: Al leer un archivo, fileencoding
se establecerá automáticamente en función de fileencodings
. Entonces solo importa para los nuevos archivos. Y de acuerdo con los docs nuevo:
Para un nuevo archivo, se utiliza el valor global de ''fileencoding''.
Me he encontrado con problemas varias veces porque la codificación de vim estaba establecida en latin1 por defecto y no me di cuenta y asumí que estaba usando utf-8. Ahora que lo tengo, me gustaría configurar vim para que haga lo correcto en todos los casos obvios, y use utf-8 de forma predeterminada.
Lo que me gustaría evitar:
- Forzar un archivo guardado en alguna otra codificación que hubiera funcionado antes de que mis cambios se abrieran como utf-8, lo que resulta en un galimatías.
- Obligar a un terminal que no admita caracteres multibyte (como Windows XP uno) para tratar de mostrarlos de todos modos, lo que resulta en un galimatías.
- Interferir con la capacidad de otros programas para leer o editar los archivos (tengo una aversión (tal vez injustificada) al uso de una lista de materiales de forma predeterminada porque no estoy seguro de qué tan probable es estropear otros programas).
- Otros problemas que no sé lo suficiente como para adivinar (¡pero espero que sí!)
Lo que tengo hasta ahora:
if has("multi_byte")
if &termencoding == ""
let &termencoding = &encoding
endif
set encoding=utf-8 " better default than latin1
setglobal fileencoding=utf-8 " change default file encoding when writing new files
"setglobal bomb " use a BOM when writing new files
set fileencodings=ucs-bom,utf-8,latin1 " order to check for encodings when reading files
endif
Esto se toma y se modifica ligeramente desde la wiki de vim . setglobal fileencoding
la bomb
de setglobal fileencoding
a su propia declaración porque de lo contrario no funciona. También comenté esa línea debido a mi incertidumbre con las listas de materiales.
Lo que estoy buscando:
- Posibles trampas para evitar que me perdí
- Problemas con el código existente
- Enlaces a cualquier lugar donde esto haya sido discutido / establecido ya
En última instancia, me gustaría que esto resulte en un fragmento de copiar / pegar que no requiere reflexión y que configurará vim para utf-8-por-defecto que funcionará en todas las plataformas.
EDITAR: He marcado mi propia respuesta como aceptada por ahora, por lo que puedo decir que funciona bien y cuenta todo lo que razonablemente puede explicar. Pero no está escrito en piedra; si tiene alguna información nueva, ¡no dude en responder!
Creo que sería suficiente tener un vimrc vainilla + fenc = utf-8
El resto debe ser bastante decente fuera de la caja
Utilizaría la BOM solo en plataformas Windows con herramientas de Microsoft (aunque incluso algunas de ellas no siempre escriben una lista de materiales, sin embargo, es la opción predeterminada para el almacenamiento de Bloc de notas Unicode, .NET XmlWriter y otros puntos centrales de las herramientas de la plataforma MS)