Warum sehe ich in vim keinen Unterschied zwischen zwei verschiedenen Dateien im Einfügemodus?

8

Lassen Sie uns zwei Dateien erstellen:

$ echo -n 'test' > test.txt
$ wc test.txt 
0 1 4 test.txt

Die Datei test.txtenthält keinen nachgestellten Zeilenumbruch.

$ echo 'test' > test_n.txt
$ wc test_n.txt 
1 1 5 test_n.txt

Die Datei test_n.txtenthält den nachfolgenden Zeilenumbruch.

Die beiden oben genannten Dateien unterscheiden sich offensichtlich, aber die Vorschau beider Dateien vimim Einfügemodus enthält keine Unterschiede:

$ vim test.txt

Geben Sie hier die Bildbeschreibung ein

$ vim test_n.txt

Geben Sie hier die Bildbeschreibung ein

Warum gibt es keinen Unterschied (neue Zeile oder eine besondere Unterscheidung)?

Und was kann ich tun, um ein solches zusätzliches Zeichen vimim Einfügemodus hinzuzufügen oder zu entfernen ?

simhumileco
quelle
4
": set list" würde den Unterschied anzeigen, und es gibt einen Modus, den Sie überprüfen können. Beide sind in den Hilfedateien.
Thomas Dickey
Vielen Dank @ThomasDickey Ich kannte diese Option vorher nicht.
Simhumileco
1
@ThomasDickey Wenn Sie eine Antwort hinzufügen möchten, ist dies wahrscheinlich die akzeptierte Antwort. Vielen Dank.
Simhumileco
2
@filbranden bitte keine Antworten in Kommentaren posten. Antworten in Kommentaren können von der Community nicht bewertet werden und markieren die Frage nicht als beantwortet.
Terdon
2
@ ThomasDickey siehe oben. Bitte poste das als Antwort.
Terdon

Antworten:

12

vim hat den Modus "eol" (für Zeilenende), um anzugeben , was zu tun ist , wenn in der letzten Zeile der Datei kein Zeilenumbruchzeichen vorhanden ist . Sie können alle Moduseinstellungen in vim (oder einem anderen Programm wie vi) von sehen

:set all

POSIX vi nicht über eine Funktion für diesen: Datei entweder die Länge Null ist, oder hat ein Newline. Dies liegt daran, dass POSIX vi nur Textdateien behandelt, bei denen es sich per Definition um Zeilen handelt, die mit Zeilenumbrüchen enden. Bei einer schnellen Überprüfung haben nvi und elvis keine Modi dafür. In meinem Kommentar hatte ich ein Detail von vim vergessen: Im Gegensatz zu vile zeigt eine ": set list" die fehlende Newline nicht ohne weiteres an. Folgendes sehe ich in vim:

ssss$
test$
~
~

während in gemein:

ssss^J
test
~
~

Für jeden Editor können Sie die Datei einlesen, den Modus ändern , z.

:set noeol

und schreiben Sie die Datei aus, um eine neue Zeile für die aktualisierte Datei zu erhalten. Anstatt es direkt anzuzeigen, können Sie die Statuszeile von vim ändern , um diese Informationen anzuzeigen. Standardmäßig scheint dies nicht der Fall zu sein, aber einige Packager haben dies angepasst, z.

"foo" [noeol] 2L, 9C                                          1,1           All

In einem der Kommentare wird die Verwendung des "?" Modifikator des setBefehls, z.

:set eol?

was so etwas zeigen könnte:

noendofline                                                   2,1           All

aber im Einfügemodus wird das durch ersetzt

-- INSERT --                                                  2,1           All

Daher scheint die Statuszeile der richtige Ort zu sein, um diese Informationen zu verwalten.

Die Funktionen sind schon eine Weile da:

  • Das eolFeature wurde erstmals in Version 2.4 (Juli 1994) veröffentlicht, wie aus einem Kommentar im Quellcode hervorgeht.

  • Der newlineModus von vile erschien im Juli 1993 .

( Nvi, elvis, vim und vile alle Griff binären Dateien zusätzlich zu den POSIX vi Text - Dateien).

Thomas Dickey
quelle
2
Fast 20 Jahre mit Vim, und ich lerne immer noch neue Dinge darüber. und ich habe immer noch Angst vor Emacs. : D
Tim Kennedy
1
In vim können Sie auch :set eol?überprüfen, ob eol aktiviert oder deaktiviert ist, sodass Sie nicht die gesamte Ausgabe von durchsehen müssen :set all.
Kevin
Eine weniger verwirrende Art zu sagen, "Dateien haben entweder eine Länge von Null oder eine nachgestellte neue Zeile" ist "alle Zeilen enden mit einer neuen Zeile, und eine Textdatei ist eine Folge von null oder mehr Zeilen".
R .. GitHub STOP HELPING ICE