Podczas próby zatwierdzenia niektórych plików w git dostaję błędy „końcowe białe znaki”.
Chcę automatycznie usunąć końcowe znaki białych znaków przed zapisaniem plików Pythona.
Czy możesz skonfigurować vima, aby to robił? Jeśli tak to jak?
vim
automation
whitespace
removing-whitespace
Paul D. Eden
źródło
źródło
Odpowiedzi:
Tutaj znalazłem odpowiedź .
Dodanie następującego do mojego pliku .vimrc załatwiło sprawę.
źródło
e
na końcu oznacza, że jeśli nie znaleźliśmy wzorca, vi nie uważa polecenia zastępczego za nieudaneKompilacja powyższego plus zapisywanie pozycji kursora:
Jeśli chcesz zastosować to do zapisu do dowolnego pliku, pomiń drugi
autocmd
i użyj symbolu wieloznacznego*
:źródło
autocmd FileType c,cpp,java,php,ruby,python
część, aby dotyczyła wszystkich plików.<buffer>
ze*
jeśli chcesz go do pracy na wszystkich plikówkeepp
, nie zmieni on historii wyszukiwania, tj.keepp %s/\s\+$//e
Zwykle mam również:
w moim
.vimrc
pliku, aby białe znaki końca linii były podświetlone.Todo bycia składnia hilighting nazwa-grupy , która jest używana do hilighting słowa kluczowe jak
TODO
,FIXME
lubXXX
. Ma denerwująco brzydki żółtawy kolor tła i uważam, że najlepiej jest ukryć w kodzie to, czego nie chcesz :-)źródło
:hi Todo
. Więc przestudiowałem:hi <Tab>
i:help hi
. Zastanawiałem sięCursor
iError
, ale myślę, że spróbujęmatch VisualNOS /\s\+$/
. Mógłbym połączyć to z niektórymiautocmd
z innych odpowiedzi tutaj.Zarówno podkreślam istniejące końcowe białe znaki, jak i usuwam końcowe białe znaki.
Konfiguruję mój edytor (vim), aby wyświetlać białe znaki na końcu, np
z tym na dole mojego .vimrc:
i „automatycznie usuwam” je z plików podczas ich zapisywania, w moim przypadku * .rb dla plików ruby, ponownie w moim ~ / .vimrc
źródło
Oto sposób na filtrowanie według więcej niż jednego FileType.
źródło
Skopiowano i wklejono z http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.html (link już nie działa, ale potrzebna część jest poniżej)
„Ma to tę zaletę, że nie wyróżnia każdego wpisanego miejsca na końcu wiersza, tylko po otwarciu pliku lub wyjściu z trybu wstawiania. Bardzo porządnie”.
źródło
Widziałem to rozwiązanie w komentarzu na VIM Wikia - Usuń niechciane spacje
Naprawdę mi się podobało. Dodaje
.
niechciane białe spacje.Umieść to w swoim
.vimrc
źródło
Tak to robię. Nie pamiętam, skąd go ukradłem.
źródło
%s
flaga globalna (g) jest tak bezużyteczna jak spacja na EOL :-)Rozwiązanie, które po prostu usuwa końcowe spacje z pliku, nie jest akceptowane we wszystkich okolicznościach. Będzie działał w projekcie, który od początku obowiązywał tę zasadę, więc nie ma takich białych znaków, że nie dodałeś się tylko do nadchodzącego zatwierdzenia.
Załóżmy, że nie chcesz dodawać nowych instancji końcowych białych znaków bez wpływu na istniejące białe znaki w liniach, których nie edytowałeś, aby zachować zatwierdzenie bez zmian, które nie mają znaczenia dla twojej pracy.
W takim przypadku za pomocą git możesz użyć takiego skryptu:
Innymi słowy, przechowujemy zmiany, a następnie filtrujemy wszystkie
+
linie w diff, aby usunąć końcowe białe znaki, gdy ponownie zastosujemy zmianę do katalogu roboczego. Jeśli ta komenda zakończy się powodzeniem, upuszczamy skrytkę.źródło
Inne podejścia tutaj jakoś nie działały dla mnie w MacVimie, gdy zostały użyte w
.vimrc
pliku. Oto jeden, który robi i wyróżnia końcowe spacje:źródło
set listchars=trail:·
mówiąc:E474: Invalid argument: listchars=trail:·
. Czy możesz potwierdzić swój przykład?autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>
źródło
Dla osób, które chcą uruchomić go dla określonych typów plików (typy plików nie zawsze są niezawodne):
Lub z vim7:
źródło
Jeśli przycinasz białe znaki, powinieneś to robić tylko dla plików, które są już czyste. "Kiedy w Rzymie...". Jest to dobra etykieta podczas pracy z bazami kodowymi, w których niepożądane zmiany są niepożądane.
Ta funkcja wykrywa końcowe białe znaki i włącza przycinanie tylko wtedy, gdy było już czyste.
Zaletą tego pomysłu jest klejnot komentarza tutaj: https://github.com/atom/whitespace/issues/10 (najdłuższy strumień komentarzy do zgłoszeń błędów)
źródło
let _s=@/
i przywrócić go na końcu `let @ / = _ s`. W tym przypadku korzystamy z rejestru czarnej dziury