Wenn Vim eine vorhandene Datei liest, versucht es, die Dateicodierung zu erkennen. Beim Schreiben der Datei verwendet Vim die von ihm erkannte Dateicodierung (sofern Sie dies nicht anders angeben). Daher wird eine als UTF-8 erkannte Datei als UTF-8, eine als Latin-1 erkannte Datei als Latin-1 usw. geschrieben.
Standardmäßig ist der Erkennungsprozess grob. Es wird davon ausgegangen, dass jede Datei, die Sie mit Vim öffnen, Latin-1 ist, es sei denn, oben wird eine Unicode-Markierung für die Bytereihenfolge erkannt. Eine UTF-8-Datei ohne eine Markierung für die Bytereihenfolge kann nur schwer bearbeitet werden, da Multibyte-Zeichen im Puffer als Zeichenfolgen anstelle einzelner Zeichen angezeigt werden.
Schlimmer noch, Vim verwendet standardmäßig Latin-1, um den Text im Puffer darzustellen. Daher wird eine UTF-8-Datei mit einer Markierung für die Bytereihenfolge durch die Downkonvertierung nach Latin-1 beschädigt.
Die Lösung besteht darin, Vim für die interne Verwendung von UTF-8 zu konfigurieren. Dies wird in der Vim-Dokumentation empfohlen, und der einzige Grund, warum es nicht so konfiguriert ist, besteht darin, dass Benutzer, die davon ausgehen, dass Vim im Grunde genommen als Latin-1-Editor arbeitet, keine enorme Verwirrung stiften.
Fügen Sie in Ihrem Vim .vimrc
hinzu set encoding=utf-8
und starten Sie es neu.
Oder setzen Sie stattdessen die LANG
Umgebungsvariable, um anzugeben, dass UTF-8 Ihre bevorzugte Zeichenkodierung ist. Dies betrifft nicht nur Vim, sondern jede Software, die darauf angewiesen ist, LANG
zu bestimmen, wie Text dargestellt werden soll. Um beispielsweise anzugeben, dass Text in Englisch ( en
) angezeigt werden soll , wie in den USA ( US
) gesprochen, und als UTF-8 ( utf-8
) codiert , setzen LANG=en_US.utf-8
.
Jetzt wird Vim UTF-8 verwenden, um den Text im Puffer darzustellen. Außerdem wird das Erkennen der UTF-8-Codierung in einer Datei entschlossener. Neben der Suche nach einer Markierung für die Bytereihenfolge wird auch nach UTF-8 ohne Markierung für die Bytereihenfolge gesucht, bevor auf Latin-1 zurückgegriffen wird. Daher wird eine in UTF-8 codierte Datei nicht mehr beschädigt, und die UTF-8-Zeichen sollten während der Editiersitzung ordnungsgemäß angezeigt werden.
Weitere Informationen dazu, wie Vim die Dateicodierung erkennt, finden Sie in der Vim-Dokumentation unter der
fileencodings
Option .
Weitere Informationen zum Festlegen der Codierung, die Vim intern verwendet, finden Sie unter der encoding
Option .
Wenn Sie die Codierung überschreiben müssen, die beim Zurückschreiben einer Datei auf die Festplatte verwendet wird, lesen Sie die fileencoding
Option .
.vimrc
. Tatsächlich ist der Standardwert für die Codierung "latin1" oder der Wert von $ LANG, der in meinem System auf festgelegt isten_US.UTF-8
. Aus diesem Grund:set encoding
gibt esencoding=utf-8
out of the box. Wie erwartet, wenn LANG nicht gesetzt ist,:set encoding
gibtencoding=latin1
. Danke für die tolle Antwort!