Nie dodawaj nowej linii na końcu pliku

11

Podczas zapisywania Vim zawsze dodaje nowy wiersz na końcu moich plików i powoduje błędy w moich skryptach PHP.

Jak sprawić, aby vim nie dodawał tej nowej linii przy zapisywaniu?

Dan
źródło
7
„powoduje błędy w moich skryptach PHP” -> To dziwne? PHP powinno dobrze działać z końcowym znakiem nowej linii. W rzeczywistości jest to prawie standard. Być może masz pustą linię po tym, ?>co PHP wysyła do przeglądarki (powodując błąd „nagłówki już wysłane”)? Nie potrzebujesz końcowego ?>, i zwykle zaleca się, aby go pominąć, aby dokładnie uniknąć tego problemu.
Martin Tournoij
Myślę, że to wprowadza w błąd. Nasze skrypty interpretują każde wyjście jako błąd.
Dan
1
Nie. Vim nie dodaje nowej linii.
romainl

Odpowiedzi:

11

To nie jest całkowicie pusta linia, tylko ostatnia nowa linia na końcu ostatniej linii. Narzędzia uniksowe (jak dziedzictwo Vima) nalegają na dodanie tego, podczas gdy system operacyjny Windows nie jest tak rygorystyczny. Możesz przeczytać więcej na ten temat na stronie Dlaczego pliki powinny kończyć się nową linią?

Niestety, dość skomplikowane jest uniemożliwienie Vimowi napisania ostatniej nowej linii. Wtyczka My PreserveNoEOL może to zrobić. Omówienie podejść można również znaleźć w VIM Wyłącz automatyczną nową linię na końcu pliku .

Ingo Karkat
źródło
Zwracając uwagę na przyszłych czytelników, że chociaż ta odpowiedź była wtedy świetna, w nowszych wersjach Vima istnieje znacznie prostsze rozwiązanie w odpowiedzi zamieszczonej później .
Bogaty
11

W nowych wersjach Vima jest na to wreszcie opcja

Vim 7.4.785 dodaje opcję „fixeol”, którą można wyłączyć, aby automatycznie zachować brakujące EOL na końcu pliku.

(patrz strona wiki: http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF )

~/.vimrcDodaj swoją linię:

set nofixeol

Uruchom ponownie vim, teraz nie powinien dodawać nowego wiersza na końcu pliku.

(działa tylko od wersji vima 7.4.785)

DarthVanger
źródło
0

Czy próbowałeś otworzyć plik w trybie binarnym? Spróbować vim -b file_name. Nie powinien dodawać nowej linii na końcu pliku.

Ali
źródło
Próbowałem to zrobić, a następnie użyć xxddo weryfikacji, ale nadal dodaje linefeed ( 0a) nawet w trybie binarnym.
James