¿Cómo puedo cambiar la codificación de un archivo con vim?

235

Estoy acostumbrado a usar vim para modificar las terminaciones de línea de un archivo:

$ 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 intentando lo siguiente, 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 a alguien decir que podía "configurar fileencoding = utf-8, luego actualizar y escribir el archivo, y funciona", pero parece que me falta algo, o de lo contrario estaba confundido. No sé a qué se refería con "luego actualizar".

skiphoppy
fuente

Respuestas:

163

Tenga en cuenta que hay una diferencia entre

establecer codificación

y

establecer codificación de archivo

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

Johan
fuente
1
¡gracias! Apache estaba generando utf-8, también php, así que el navegador dijo, así que vim dijo con set encoding, y aún las páginas mostraban caracteres destrozados que estaban bien como iso-8859-1. usando set fileencodingmostró un bonito 'Latin1'
Adriano Varoli Piazza
77

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

Sólo:

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

Y tu estas listo.


fuente
19
Desventaja, iconv podría no estar fácilmente disponible en Windows.
Adriano Varoli Piazza
2
@AdrianoVaroliPiazza ni vim.
1
Yo diría que varias descargas de "solo instalar", incluso con una edición portátil, "constituyen" fácilmente disponibles ".
Adriano Varoli Piazza
2
@ adriano-varoli-piazza No, iconv está disponible en Windows con Cygwin y MingW, como señaló @ coder-tim.
t0r0X
1
@mario No, Vim está fácilmente disponible en Windows: vim.org/download.php#pc
t0r0X
52

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

$ vim file
:set bomb
:set fileencoding=utf-8
:wq
Francis
fuente
8
Gracias por su respuesta, me llevó a aprender 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 es un formato fijo de longitud de bytes como 16 o 32. Consulte aquí para obtener una explicación y referencia. No es un problema (e incluso útil) para vim, solo pensé que las personas deberían ser conscientes de que puede causar problemas de compatibilidad en otros lugares.
joelhardi 01 de
2
¿Es bombo bom, y puede ser unset? EDITAR : Sí, puede eliminarlo a través de set nobomb.
icedwater 01 de
66
Sí, VIm nos configuró el bomb(con ab).
ruffin
según los documentos, :set bombse enciende si :set fenc=utf-8... ver:he bomb
Evan Carroll
12
toda nuestra codificación base ahora pertenece a UTF-8
roblogic
6

Podría ser útil cambiar la codificación solo en la línea de comando 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 comenzar , --cmd.

Hans Ginzel
fuente
3
La primera variación también debería funcionar en shells * nix. 'single quotes'solo son necesarios para escapar de todos los metacaracteres, que generalmente no es lo que quieres.
jpaugh