Basisinformation
Vim zeigt nicht den neuesten Zeilenumbruch im Puffer an, aber tatsächlich platziert Vim EOL beim Schreiben immer am Ende der Datei, da dies für Textdateien in Unix-Systemen Standard ist. Weitere Informationen dazu finden Sie hier . Kurz gesagt, Sie müssen sich keine Gedanken über das Fehlen neuer Zeilen am Ende der Datei in vim machen.
Versuch 1
Mit diesem kleinen Experiment können Sie dieses Verhalten überprüfen. Im Terminal ausführen:
$vim test_test
Geben Sie zum Beispiel nur Zeichen ein 1
und speichern Sie die Datei :w.
Sie haben nur ein Zeichen in der Datei, oder? Eigentlich nein :) Du hast jetzt in deiner Datei 1
und LF
Zeichen. Lassen Sie es uns mit dem hexdump-Dienstprogramm überprüfen:
$hexdump test_test
Ausgabe:
0000000 31 0a
0000002
31
ist ein ASCII-Code für Zeichen 1
und 0a
ein ASCII-Code für nicht druckbare LF
Zeichen, die unter UNIX möglicherweise bereits den Code für das Zeilenende kennen.
Versuch 2
Aber was ist, wenn wir eine Datei öffnen, die eol
am Ende der Datei kein Symbol hat? Lassen Sie es uns auch überprüfen. Lassen Sie uns am Ende eine Datei ohne eol erstellen, zum Beispiel so:
$echo -n "1" > test_without_eol
und dann schauen wir nochmal mit hexdump hinein
$hexdup test_without_eol
Ausgabe wird sein:
000000 31
0000001
Also gibt es hier keine eol
Charaktere. Lassen Sie uns diese Datei in vim öffnen:
$vim test_without_eol
Am unteren Rand des Editors sehen Sie:
"test_without_eol" [noeol] 1L, 1C
Und wenn Sie diese Datei speichern eol
, wird der Charakter automatisch geputtet.
Was können wir dagegen tun?
Wenn Sie das Ende der Datei wirklich sehen müssen. Versuchen Sie, diesen Befehl zu verwenden:
:set listchars=eol:$
Es werden alle eol
Zeichen als $
Zeichen angezeigt.
:set listchars=eol:$
Vim lässt die EOL nur dann aus, wenn die Datei geöffnet wurde
'binary'
und die'endofline'
Option zurückgesetzt wurde (wenn die Binärdatei beim Öffnen keine EOL hatte oder Sie die Option explizit zurücksetzen). Mit anderen Worten, Vim berücksichtigt nur eine fehlende EOL für Binärdateien. Bei Textdateien wird immer mit einer (hinzugefügten) EOL geschrieben. (Deshalb benötigen Sie Lösungen wie mein PreserveNoEOL-Plugin , um Textdateien ohne EOL zu speichern.) Alle Details finden Sie unter:help 'endofline'
.Sie müssen also nur sicherstellen, dass die Datei nicht als Binärdatei geöffnet wird , damit Vim automatisch eine EOL schreibt.
quelle
Wie Alexander erwähnte, zeigt Vim EOL bei EOF nicht an, deshalb ist es so verwirrend (insbesondere bei leeren / leeren neuen Zeilen, was eine andere Sache ist), dass es tatsächlich jedes Mal beim Speichern von Dateien schreibt.
Hier ist ein einfacher Test, um zu testen, ob das funktioniert:
Beachten Sie, wie sich die Shell-Eingabeaufforderung verhält, wenn keine EOL vorhanden ist (sie wird mit der nächsten Zeile gemischt). Wenn Sie eine Datei mit Vim erneut speichern, wird sie hinzugefügt.
Mit können
wc
wir Zeilen, Wörter und Zeichen vor und nach dem Speichern zählen, damit wir sehen können, dass sich das tatsächlich ändert.Warum ist das so wichtig? Damit unsere Dateien POSIX-konform bleiben .
quelle