Więc pracuję w sklepie PHP i wszyscy używamy różnych edytorów i wszyscy musimy pracować na Windowsie. Używam vima i wszyscy w sklepie narzekają, że za każdym razem, gdy edytuję plik, na dole jest nowy wiersz. Szukałem wokoło i odkryłem, że jest to udokumentowane zachowanie vi & vim ... ale zastanawiałem się, czy istnieje jakiś sposób, aby wyłączyć tę funkcję. (Byłoby najlepiej, gdybym mógł to wyłączyć dla określonych rozszerzeń plików).
Jeśli ktoś o tym wie, byłoby świetnie!
?>
tagu zamykającego, właśnie z tego powodu.Odpowiedzi:
A dla wersji
vim
7.4+ możesz użyć (najlepiej na swoim .vimrc) (dzięki 罗泽轩 za ostatnie wiadomości!):Teraz dotyczy starszych wersji
vim
.Nawet jeśli plik został już zapisany z nowymi liniami na końcu:
vim -b file
i raz w vimie:Gotowe.
alternatywnie możesz otwierać pliki w vimie za pomocą
:e ++bin file
Jeszcze jedna alternatywa:
źródło
set binary
iwset noeol
swoim .vimrcbinary
przesłonięciaexpandtab
, które doprowadzą do uzyskania dosłownych zakładek w źródle.set nofixendofline
aby rozwiązać problem w Vimie 7.4+Dodaj następujące polecenie do .vimrc, aby włączyć opcję końca linii:
Jednak sam PHP zignoruje ten ostatni koniec linii - nie powinno to stanowić problemu. Jestem prawie pewien, że w twoim przypadku jest coś innego, co dodaje ostatni znak nowej linii, lub możliwe, że jest to mixup z typami końca linii Windows / Unix (
\n
lub\r\n
itp.).Aktualizacja:
Alternatywnym rozwiązaniem może być po prostu dodanie tej linii do pliku .vimrc:
źródło
Istnieje inny sposób, aby podejść do tego, jeśli używasz Git do kontroli źródła. Zainspirowany odpowiedzią tutaj napisałem własny filtr do użycia w pliku gitattributes .
Aby zainstalować ten filtr, zapisz go
noeol_filter
gdzieś w swoim$PATH
, ustaw go jako wykonywalny i uruchom następujące polecenia:Aby zacząć korzystać z filtra tylko dla siebie, wstaw następujący wiersz w
$GIT_DIR/info/attributes
:Zapewni to, że nie zatwierdzisz nowego wiersza na eof w
.php
pliku, bez względu na to, co zrobi Vim.A teraz sam skrypt:
źródło
Nie próbowałem tej opcji, ale w systemie pomocy vim podane są następujące informacje (tj. Help eol):
Możesz być również zainteresowany odpowiedzią na poprzednie pytanie: „ Dlaczego pliki powinny kończyć się nową linią ”.
źródło
Dodałem wskazówkę na wiki Vima dotyczącą podobnego (choć innego) problemu:
http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF
źródło
fixeol
opcję, którą można wyłączyć, aby automatycznie zachować brakujące EOL na końcu pliku. Ten skrypt staje się niepotrzebny w wersji Vim 7.4.785 i nowszych. ” (Źródło: ta sama strona wiki.) Dzięki, nie wiedziałem o tej nowej opcji.noeol
inofixeol
osiągnąć pożądany rezultat.OK, bycie w systemie Windows komplikuje sprawy;)
Ponieważ opcja „binarna” resetuje opcję „format pliku” (a pisanie za pomocą zestawu „binarnego” zawsze pisze z zakończeniami linii uniksowej), wyjmijmy wielki młot i zróbmy to na zewnątrz!
Co powiesz na zdefiniowanie autocommand (: help autocommand) dla zdarzenia BufWritePost? Ta komenda automatyczna jest wykonywana po każdym zapisaniu całego bufora. W tej komendzie automatycznej wywołaj małe narzędzie zewnętrzne (php, perl lub inny skrypt), które usuwa ostatnią nową linię właśnie zapisanego pliku.
Więc wyglądałoby to mniej więcej tak i przechodziłoby do twojego pliku .vimrc:
Przeczytaj całą dokumentację vim na temat komend automatycznych, jeśli po raz pierwszy masz do czynienia z komendami automatycznymi. Istnieją pewne zastrzeżenia, np. Zaleca się usunięcie wszystkich autocmds z .vimrc na wypadek, gdyby twoje .vimrc mogło uzyskać wiele źródeł.
źródło
silent
. Npsilent !your-script <afile>
.Zaimplementowałem sugestie Blixtor z postprocessingiem Perla i Pythona, albo działając w Vimie (jeśli jest skompilowany z taką obsługą języków), albo przez zewnętrzny skrypt Perla. Jest dostępny jako wtyczka PreserveNoEOL na vim.org.
źródło
let g:PreserveNoEOL = 1
w swoim.vimrc
pliku! Musiałem nauczyć się vimscript, aby dowiedzieć się o tym z opisu wtyczki! : D:help PreserveNoEOL-usage
by ci powiedział. RTFM :-)INSTALLATION
iCONFIGURATION
. Nawet nie zauważyłemUSAGE
sekcji w opisie, ponieważ jest ona powyżej instalacji :)Może mógłbyś sprawdzić, dlaczego narzekają. Jeśli plik php ma nowy wiersz po zakończeniu?>, Php wyświetli go jako część strony. Nie stanowi to problemu, chyba że spróbujesz wysłać nagłówki po dołączeniu pliku.
Jednak?> Na końcu pliku php jest opcjonalny. Bez końca?>, Nie ma problemu z nową linią na końcu pliku.
źródło
Dodaję .vimrc
i to pomaga, spróbuj
źródło
Myślę, że znalazłem lepsze rozwiązanie niż zaakceptowana odpowiedź. Alternatywne rozwiązania nie działały dla mnie i nie chciałem cały czas pracować w trybie binarnym. Na szczęście wydaje się, że wykonało to zadanie i nie spotkałem się jeszcze z żadnymi nieprzyjemnymi skutkami ubocznymi: zachowaj brakujący koniec linii na końcu plików tekstowych . Właśnie dodałem całą rzecz do mojego ~ / .vimrc.
źródło
Czy byłoby możliwe użycie specjalnego polecenia do zapisywania tych plików?
Jeśli zrobisz: ustaw binarny,: w i: ustaw nobinary, plik zostanie zapisany bez nowej linii, jeśli nie było go na początku.
Oczywiście tę sekwencję poleceń można umieścić w poleceniu zdefiniowanym przez użytkownika lub w mapowaniu.
źródło
Począwszy od wersji
vim
7.4 możesz używaćInformacje na temat tej zmiany można znaleźć tutaj: http://ftp.vim.org/vim/patches/7.4/7.4.785 .
źródło
Odkryłem, że ta wtyczka vimscript jest pomocna w tej sytuacji.
Lub czytaj więcej na github
źródło