Podstawowa informacja
Vim nie wyświetla najnowszej nowej linii w buforze, ale w rzeczywistości vim zawsze umieszcza EOL na końcu pliku, gdy go piszesz, ponieważ jest standardem dla plików tekstowych w systemach uniksowych. Więcej informacji na ten temat można znaleźć tutaj . Krótko mówiąc, nie musisz się martwić brakiem nowych wierszy na końcu pliku w vimie.
Eksperyment 1
Możesz wykonać mały eksperyment, aby sprawdzić to zachowanie. W terminalu wykonaj:
$ vim test_test
Wpisz znak 1
i zapisz plik :wq.
W pliku jest tylko jeden znak, prawda? Właściwie nie :) Masz teraz w swoim pliku 1
i LF
postaciach. Sprawdźmy to za pomocą narzędzia hexdump:
$ hexdump test_test
0000000 31 0a
0000002
31
jest kodem ASCII dla znaku 1
i 0a
jest kodem ASCII dla niedrukowalnego LF
znaku, który dla systemu UNIX, jak być może już znasz, kod końca linii.
Eksperyment 2
Ale co, jeśli otworzymy plik, który nie ma eol
symbolu na końcu pliku. Sprawdźmy to też. Utwórzmy na końcu plik bez eol, na przykład tak:
$ echo -n "1" > test_without_eol
Następnie spójrzmy do środka z zrzutem heksadecymalnym:
$ hexdump test_without_eol
000000 31
0000001
Więc nie ma eol
tutaj żadnych znaków. Otwórzmy ten plik w vimie:
$ vim test_without_eol
Na dole edytora zobaczysz:
"test_without_eol" [noeol] 1L, 1C
A jeśli zapiszesz ten eol
znak postaci zostanie wstawiony automatycznie.
Co możemy z tym zrobić?
Jeśli naprawdę potrzebujesz zobaczyć koniec pliku. Spróbuj użyć tego polecenia:
:set listchars=eol:$
pokaże wszystkie eol
znaki jako $
znak.
:set listchars=eol:$
Vim pomija tylko EOL, jeśli plik jest otwierany jak
'binary'
i'endofline'
opcja jest resetowany (gdy plik binarny nie miał EOL podczas otwierania lub jawnie zresetować opcję). Innymi słowy, Vim honoruje tylko brakujące EOL dla plików binarnych. W przypadku plików tekstowych zawsze pisze z (dodanym) EOL. (Właśnie dlatego potrzebujesz rozwiązań takich jak moja wtyczka PreserveNoEOL, aby przechowywać pliki tekstowe bez EOL.) Wszystkie szczegóły znajdziesz na:help 'endofline'
.Musisz tylko upewnić się, że plik jest otwarty jako plik binarny , aby Vim automatycznie napisał EOL.
źródło
Jak wspomniał Alexander , Vim nie pokazuje EOL na EOF, dlatego jest tak mylący (szczególnie z pustą / pustą nową linią, co jest inną rzeczą), dlatego faktycznie zapisuje za każdym razem przy zapisywaniu pliku.
Oto prosty test, jak sprawdzić, czy to działa:
Zauważ, jak zachowuje się znak zachęty powłoki, gdy nie ma EOL (miesza się z następnym wierszem). Podczas ponownego zapisywania pliku w Vimie dodaje go.
Za pomocą
wc
możemy policzyć wiersze, słowa i znaki przed zapisaniem i po, abyśmy mogli zobaczyć, że faktycznie się zmienia.Dlaczego to takie ważne? Aby zachować zgodność naszych plików z POSIX .
źródło