2009-04-22 10 views
211

Estoy acostumbrado a usar vim para modificar los finales de línea de un archivo:¿Cómo puedo cambiar la codificación de un archivo con vim?

$ file file 
file: ASCII text, with CRLF line terminators 
$ vim file 
:set ff=mac 
:wq 
$ file file 
file: ASCII text, with CR line terminators 

¿Es posible utilizar un proceso similar para cambiar la codificación Unicode de un archivo? Estoy tratando los siguientes, que no funciona:

$ file file.xml 
file.xml: Unicode text, UTF-16, little-endian 
$ vim file 
:set encoding=utf-8 
:wq 
$ file file.xml 
file.xml: Unicode text, UTF-16, little-endian 

vi someone say que podía "set fileEncoding = UTF-8, a continuación, actualizar y escribir el archivo, y funciona", pero me parece se está perdiendo algo, o de lo contrario estaba confundido. No sé a qué se refería con "luego actualizar".

Respuesta

211

Desde el doc:

: escribir ++ enc = UTF-8 russian.txt

lo que debería ser capaz de cambiar la codificación como parte del comando de escritura.

+2

Enlace de documentación actualizada: http://vimdoc.sourceforge.net/htmldoc/usr_45.html#45.4 –

47

Al igual que sus pasos, la configuración del fileencoding debería funcionar. Sin embargo, me gustaría agregar una "bomba de conjunto" para ayudar al editor a considerar el archivo como UTF8.

$ vim file 
:set bomb 
:set fileencoding=utf-8 
:wq 
+7

Gracias por su respuesta, me llevó a conocer más sobre la marca de orden de bytes UTF. Sin embargo, para su información, establecer una lista de materiales parece innecesario/desaconsejable para UTF-8 ya que no se trata de un formato de longitud de bytes fijo como 16 o 32. Consulte [aquí] (http://vim.wikia.com/wiki/Working_with_Unicode) para obtener una explicación y referencia. No es un problema (e incluso útil) para vim, simplemente pensé que la gente debería ser consciente de que puede causar problemas de compatibilidad en otros lugares. – joelhardi

+1

¿Es 'bomb' o' bom', y puede ser 'desarmado'? ** EDITAR **: Sí, puedes eliminarlo mediante 'set nobomb'. – icedwater

+3

Sí, VIm nos configuró la 'bomba' (con una b). – ruffin

148

en cuenta que hay una diferencia entre

set encoding 

y

set fileencoding 

En el primer caso, se va a cambiar la codificación de salida que se muestra en la terminal. En el segundo caso, cambiará la codificación de salida del archivo que está escrito.

+1

¡gracias!Apache estaba sacando utf-8, por lo que fue php, por lo que el navegador dijo, por lo que vim dijo con 'set encoding', y aún las páginas mostraban caracteres mutilados que estaban bien como iso-8859-1. usando 'set fileencoding' mostró una bonita 'Latin1' –

71

Si bien usar vim para hacerlo es perfectamente posible, ¿por qué no utiliza simplemente iconv? Quiero decir, cargar el editor de texto solo para hacer la conversión de codificación parece usar un martillo demasiado grande para un clavo demasiado pequeño.

Justo:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml 

Y ya está.

+0

Plus, esto puede ser fácilmente guionado para más archivos. +1 –

+19

Abajo, iconv podría no estar fácilmente disponible en Windows. –

+2

@AdrianoVaroliPiazza ni vim. – Mario

3

Podría ser útil para cambiar el encoding justo en la línea de comandos antes de leer el archivo:

rem On MicroSoft Windows 
vim --cmd "set encoding=utf-8" file.ext 
# In *nix shell 
vim --cmd 'set encoding=utf-8' file.ext 

Ver starting, --cmd.

+2

La primera variación también debería funcionar en * nix shells. ''comillas simples '' solo son necesarios para escapar de todos los metacaracteres, que generalmente no es lo que quieres. – jpaugh

Cuestiones relacionadas