Wie kann ich die Codierung einer Datei mit vim ändern?

235

Ich bin es gewohnt, mit vim die Zeilenenden einer Datei zu ändern:

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

Ist es möglich, mit einem ähnlichen Verfahren die Unicode-Codierung einer Datei zu ändern? Ich versuche Folgendes, was nicht funktioniert:

$ 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

Ich sah jemanden sagen , er könne "fileencoding = utf-8 setzen, dann die Datei aktualisieren und schreiben, und es funktioniert", aber mir scheint etwas zu fehlen, oder er war verwirrt. Ich weiß nicht, was er mit "dann aktualisieren" gemeint hat.

Skiphoppy
quelle

Antworten:

163

Beachten Sie, dass es einen Unterschied zwischen gibt

Codierung einstellen

und

Dateikodierung einstellen

Im ersten Fall ändern Sie die im Terminal angezeigte Ausgabecodierung. Im zweiten Fall ändern Sie die Ausgabecodierung der geschriebenen Datei.

Johan
quelle
1
Danke! Apache gab utf-8 aus, ebenso PHP, wie der Browser sagte, so sagte vim mit set encoding, und dennoch zeigten die Seiten verstümmelte Zeichen, die in Ordnung waren wie ISO-8859-1. using set fileencodingzeigte ein hübsches 'Latin1'
Adriano Varoli Piazza
77

Wenn Sie vim verwenden, ist dies durchaus möglich. Warum verwenden Sie nicht einfach iconv? Ich meine - das Laden eines Texteditors, nur um die Codierungskonvertierung durchzuführen, scheint zu viel Hammer für zu kleine Nägel zu verwenden.

Gerade:

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

Und du bist fertig.


quelle
19
Nachteil ist, dass iconv unter Windows möglicherweise nicht einfach verfügbar ist.
Adriano Varoli Piazza
2
@AdrianoVaroliPiazza weder vim.
1
Ich würde sagen, dass mehrere "nur installieren" -Downloads, wobei sogar eine tragbare Edition "leicht verfügbar" ist.
Adriano Varoli Piazza
2
@ adriano-varoli-piazza Nein, iconv ist unter Windows mit Cygwin und MingW verfügbar, wie @ coder-tim feststellte.
t0r0X
1
@ Mario Nein, Vim sehr leicht verfügbar unter Windows: vim.org/download.php#pc
t0r0X
52

Genau wie bei Ihren Schritten sollte das Festlegen der Dateicodierung funktionieren. Ich möchte jedoch eine "Set Bomb" hinzufügen, damit der Editor die Datei als UTF8 betrachtet.

$ vim file
:set bomb
:set fileencoding=utf-8
:wq
Francis
quelle
8
Vielen Dank für Ihre Antwort. Ich habe mehr über das UTF-Byte-Bestellzeichen erfahren. Zu Ihrer Information erscheint das Festlegen einer Stückliste für UTF-8 jedoch unnötig / nicht ratsam, da es sich nicht um ein Format mit fester Bytelänge wie 16 oder 32 handelt. Hier finden Sie eine Erklärung und eine Referenz. Es ist kein Problem (und sogar hilfreich) für vim, ich dachte nur, die Leute sollten sich nur bewusst sein, dass es anderswo Kompatibilitätsprobleme verursachen kann.
Joelhardi
2
Ist es bomboder bomund kann es sein unset? EDIT : Ja, Sie können es über entfernen set nobomb.
Eiswasser
6
Ja, VIm hat uns das bomb(mit ab) eingerichtet.
Ruffin
gemäß den Dokumenten, :set bombist eingeschaltet, wenn :set fenc=utf-8.. siehe:he bomb
Evan Carroll
12
Alle unsere
Basiscodierungen
6

Es kann nützlich sein, die Codierung direkt in der Befehlszeile zu ändern , bevor die Datei gelesen wird:

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

Siehe Start , --cmd.

Hans Ginzel
quelle
3
Die erste Variante sollte auch mit * nix-Shells funktionieren. 'single quotes'werden nur benötigt, um alle Metazeichen zu maskieren, was normalerweise nicht das ist, was Sie wollen.
Jpaugh