Wenn Sie eine als latin1 codierte Datei bearbeiten, werden Sie feststellen, dass die 'Dateicodierung' für diesen Puffer auf latin1 festgelegt ist. Daher müssen Sie die Dateikodierung manuell einstellen, bevor Sie die Datei speichern.
:set fileencoding=utf8
:w myfilename
Beachten Sie auch, dass UTF8-Dateien häufig mit einem Byte Order Mark (BOM) beginnen, das Endianness anzeigt. Die Stückliste ist optional, wird jedoch von einigen Programmen ausschließlich zur Ermittlung der Dateicodierung verwendet. Unter bestimmten Umständen schreibt Vim die Stückliste, manchmal jedoch nicht. Gehen Sie folgendermaßen vor, um die Stückliste explizit festzulegen:
Die Anweisungen entpuppen gut funktionieren, aber: 1) utf-8 nicht endianness haben (wie vim Hilfe erläutert , zeigt der utf-8 BOM lediglich , dass die Datei ist utf-8); 2) Wenn Sie die Datei später erneut öffnen, müssen Sie sie set fileencoding=utf-8erneut im Voraus haben. Vim bemerkt die Stückliste nicht einmal, wenn Sie ihr gesagt haben, sie soll eine schreiben (und sie schreibt sie tatsächlich). Damit utf-8 funktioniert, benötigen Sie dies oder set encoding=utf-8Ihre Starteinstellungen. Zumindest ist das die Geschichte auf meinem System.
Stein
35
:w ++enc=utf-8 %
um die Datei in utf-8-Codierung auf die Festplatte zu schreiben.
Obwohl dies richtig ist, sollte Ihre Antwort im Vergleich zu Eric Johnsons nicht so viele positive Stimmen erhalten haben. Der Grund dafür ist, dass, wenn Sie nicht festlegen fileencoding, der Wert einmal :w ++enc=utf-8gültig ist, aber beim nächsten Ausführen :wder Wert von 'fileencoding'verwendet wird und wenn Sie ihn nicht geändert haben (explizit während der Bearbeitung oder durch erneutes Laden der Datei, in der Hoffnung das 'fencs'entsprechend eingestellt ist und die tatsächliche Kodierung ist gut erkannt wird ), wird die alte Codierung kommen.
Benoit
1
@ MichaelKrelin-Hacker, das Ändern fileencodingist auch eine gültige Antwort auf die Frage, die IMO nicht dazu führt, schlechte Gewohnheiten anzunehmen. Aber OK, das ist wohl nur eine Frage der Stimmung.
Benoit
3
@ Benoit, ich habe nicht impliziert, dass Erics Antwort nicht gültig ist! Wenn ich etwas Seltsames an seiner Antwort finde, ist es nicht der Inhalt, sondern warum hat er die Frage und die Antwort auf seine eigene Frage schnell hintereinander
gepostet
3
@ Michael Krelin - Hacker: Überprüfen Sie die FAQ. Es wird tatsächlich empfohlen, Ihre eigene Frage zu beantworten. Es ist der springende Punkt einer Q & A-Seite wie dieser. Es ist egal, wer antwortet.
0xC0000022L
2
@ 0xC0000022L, als ich das letzte Mal nachgesehen habe (jetzt noch nicht nachgesehen habe), war es wichtig, nach der Recherche eine Lösung zu finden, und nicht, Fragen und Antworten in einer Minute zu veröffentlichen . Das heißt, ich habe nur darüber gesprochen, was an seiner Antwort seltsam ist , nicht darüber, was sie ungültig macht oder so.
Antworten:
Wenn Sie eine als latin1 codierte Datei bearbeiten, werden Sie feststellen, dass die 'Dateicodierung' für diesen Puffer auf latin1 festgelegt ist. Daher müssen Sie die Dateikodierung manuell einstellen, bevor Sie die Datei speichern.
Beachten Sie auch, dass UTF8-Dateien häufig mit einem Byte Order Mark (BOM) beginnen, das Endianness anzeigt. Die Stückliste ist optional, wird jedoch von einigen Programmen ausschließlich zur Ermittlung der Dateicodierung verwendet. Unter bestimmten Umständen schreibt Vim die Stückliste, manchmal jedoch nicht. Gehen Sie folgendermaßen vor, um die Stückliste explizit festzulegen:
Für weitere Informationen
:help mbyte-options
und:help utf8
und:help bomb
.quelle
set fileencoding=utf-8
erneut im Voraus haben. Vim bemerkt die Stückliste nicht einmal, wenn Sie ihr gesagt haben, sie soll eine schreiben (und sie schreibt sie tatsächlich). Damit utf-8 funktioniert, benötigen Sie dies oderset encoding=utf-8
Ihre Starteinstellungen. Zumindest ist das die Geschichte auf meinem System.um die Datei in utf-8-Codierung auf die Festplatte zu schreiben.
quelle
fileencoding
, der Wert einmal:w ++enc=utf-8
gültig ist, aber beim nächsten Ausführen:w
der Wert von'fileencoding'
verwendet wird und wenn Sie ihn nicht geändert haben (explizit während der Bearbeitung oder durch erneutes Laden der Datei, in der Hoffnung das'fencs'
entsprechend eingestellt ist und die tatsächliche Kodierung ist gut erkannt wird ), wird die alte Codierung kommen.fileencoding
ist auch eine gültige Antwort auf die Frage, die IMO nicht dazu führt, schlechte Gewohnheiten anzunehmen. Aber OK, das ist wohl nur eine Frage der Stimmung.