Come posso modificare la codifica di un file con vim?


235

Sono abituato a usare vim per modificare le terminazioni di linea di un file:

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

È possibile utilizzare un processo simile per modificare la codifica unicode di un file? Sto provando quanto segue, che non funziona:

$ 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

Ho visto qualcuno dire che poteva "impostare fileencoding = utf-8, quindi aggiornare e scrivere il file, e funziona", ma mi sembra che manchi qualcosa, oppure era confuso. Non so cosa intendesse con "allora aggiorna".

Risposte:



163

Si noti che esiste una differenza tra

imposta la codifica

e

imposta la codifica dei file

Nel primo caso, cambierai la codifica di output mostrata nel terminale. Nel secondo caso, modificherai la codifica di output del file scritto.


1
grazie! Apache stava producendo utf-8, così come php, quindi il browser ha detto, così ha detto vim set encoding, e ancora le pagine mostravano personaggi maledetti che andavano bene come iso-8859-1. usando ha set fileencodingmostrato un bel 'Latin1'
Adriano Varoli Piazza

77

Mentre usi vim per farlo è perfettamente possibile, perché non usi semplicemente iconv? Voglio dire - caricare l'editor di testo solo per fare la conversione della codifica sembra usare un martello troppo grande per unghia troppo piccola.

Appena:

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

E hai finito.


19
Unico inconveniente, iconv potrebbe non essere facilmente disponibile su Windows.
Adriano Varoli Piazza

2
@AdrianoVaroliPiazza né vim.

1
Direi che più download "basta installare", anche con un'edizione portatile ", costituiscono" facilmente disponibili ".
Adriano Varoli Piazza

2
@ adriano-varoli-piazza No, iconv è disponibile su Windows con Cygwin e MingW, come notato da @ coder-tim.
t0r0X,

1
@mario No, Vim è facilmente disponibile su Windows: vim.org/download.php#pc
t0r0X,

52

Proprio come i tuoi passaggi, l'impostazione della codifica dei file dovrebbe funzionare. Tuttavia, vorrei aggiungere una "set bomb" per aiutare l'editor a considerare il file come UTF8.

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

8
Grazie per la tua risposta, mi ha portato a saperne di più sul segno di ordine dei byte UTF. Tuttavia, l'impostazione di una distinta base sembra non necessaria / sconsigliabile per UTF-8 poiché non è un formato a lunghezza di byte fissa come 16 o 32. Vedere qui per una spiegazione e un riferimento. Non è un problema (e nemmeno utile) per Vim, ho solo pensato che le persone dovrebbero essere consapevoli del fatto che potrebbe causare problemi di compatibilità altrove.
Joelhardi,

2
È bombo bome può essere unset? EDIT : Sì, puoi rimuoverlo tramite set nobomb.
icedwater

6
Sì, mi ha impostato il bomb(con ab).
ruffin,

per i documenti, :set bombè attivo se :set fenc=utf-8.. vedi:he bomb
Evan Carroll il

12
tutta la nostra codifica di base ora appartiene a UTF-8
roblogic

6

Potrebbe essere utile modificare la codifica solo nella riga di comando prima che il file venga letto:

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

Vedere partenza , --cmd.


3
La prima variante dovrebbe funzionare anche su shell * nix. 'single quotes'servono solo per sfuggire a tutti i meta-personaggi, che di solito non è quello che vuoi.
jpaugh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.