Jest to dość powszechne podczas programowania lub otwierania plików tekstowych w celu napotkania plików z końcowymi spacjami na końcu linii. vim ma sposób to pokazać, ustawiając trail
opcję w listchars
opcji, a następnie włączając list
ją.
Jaki jest jednak najłatwiejszy sposób na wyeliminowanie tej spacji na całym świecie w całym pliku (najlepiej bez wtyczki)?
whitespace
line-breaks
Andrew Ferrier
źródło
źródło
:h vim-faq
i wyszukać/trailing
. Trudno zapamiętać tag:h faq-12.1
.Odpowiedzi:
Użyj skrótu klawiszowego, aby usunąć wszystkie końcowe białe znaki
Ponieważ niektóre strony, które edytuję, faktycznie wymagają spacji końcowych (np. Markdown), a inne nie, skonfigurowałem przypisywanie klawiszy, aby F5było to trywialne, nie będąc automatycznym. Aby to zrobić, dodaj poniższy kod (z vim.wikia) lub jego odmianę do
.vimrc
:nnoremap <F5>
wykonuje nierekurencyjne mapowanie na kluczF5
w trybie normalnym:let _s=@/
przechowuje ostatni szukany termin (z makra@/
) w zmiennej_s
<Bar>
Działa jako symbol potoku|
do oddzielania poleceń, jednak|
zakończyłby polecenie w tym kontekście, dlatego<Bar>
należy go użyć.:%s/\s\+$//e
wyszukuje końcowe białe znaki i usuwa je wszędzie w buforze (zobacz odpowiedź CarpetSmoker, aby uzyskać szczegółowy podział tego wyrażenia)let @/=_s
przywraca ostatnie wyszukiwane hasło do makra@/
, dzięki czemu będzie dostępne przy następnym naciśnięciun
.<CR>
kończy mapowanie... lub być bardziej selektywnym
Jeśli masz przypadki, w których nie chcesz usuwać wszystkich końcowych białych znaków, możesz użyć wzorca, aby być bardziej selektywnym. Na przykład poniższy kod pokazuje, jak usuwam końcowe białe znaki tylko wtedy, gdy następuje po średniku (tutaj jest związany F8).
Jest to przydatne, jeśli, podobnie jak ja, masz jakieś pliki z heredokami podobnymi do markdown, rozproszonymi między zakończonymi średnikami instrukcjami programowania.
źródło
:keeppatterns
się zapobiec zastąpieniu@/
. A także spójrz na:keepjumps
.:help keeppattern
i nic nie dostałem.:nohl
, jeśli jeśli coś zaznaczasz, będzie ono nadal podświetlane to (zobacz moją zaktualizowaną odpowiedź).„Najprostszym” sposobem jest po prostu użycie
:substitute
::%s
do uruchomienia:substitute
w zakresie%
, który jest całym buforem.\s
dopasuj wszystkie znaki spacji.\+
powtarzać je 1 lub więcej razy.$
zakotwiczyć na końcu linii.e
Flaga nie dać błąd, jeśli nie ma odpowiednika (czyli plik jest już bez końcowe spacje).Jednak prawdopodobnie nie jest to „najlepszy” sposób, ponieważ powoduje dwa skutki uboczne:
Możesz naprawić oba elementy, zmieniając to w funkcję:
A następnie użyj go w następujący sposób:
winsaveview()
Będzie zapisać aktualną „Widok”, który zawiera pozycję kursora, fałdy, skoki itpwinrestview()
na końcu przywróci to od zapisanego zmiennej.:keeppatterns
Zapobiega\s\+$
wzorzec z dodawanych do historii wyszukiwania.Ponieważ ciągłe pisanie jest dość denerwujące
:call
, możesz zdefiniować polecenie:Które mogą być używane bez
:call
:I oczywiście możesz powiązać go z kluczem:
Niektóre osoby lubią to robić automatycznie przed zapisaniem pliku na dysku, na przykład:
Nie podoba mi się to, ponieważ niektóre formaty wymagają spacji końcowych (takich jak Markdown), a przy innych okazjach chcesz nawet spacji końcowych w kodzie (takich jak formatowanie wiadomości e-mail i użycie
--<Space>
znacznika do wskazania początku podpisu ).Bezwstydny tryb wtyczki: jakiś czas temu napisałem mały skrypt Pythona, aby wyczyścić białe znaki dla całego projektu naraz.
źródło
`
dwa razy po zakończeniu zamiany. Otwiera to możliwość stworzenia takiego onelinera:%s/\s\+$//e | exe "normal ``"
Aby usunąć wszystkie końcowe białe znaki (na końcu każdej linii), możesz użyć polecenia:
Aby dołączyć tabulatory, użyj
\s
zamiast spacji.Z wiersza polecenia:
Wszystkie pliki w bieżącym katalogu (użyj rekurencyjnie
**/*.*
):Sposób Pythona:
lub:
Użyj
lstrip()
do lewego paska (wleczonego),rstrip()
do prawego paska (prowadzącego) lubstrip()
do usunięcia z obu końców.Oto przydatna funkcja, która usuwa zbędne białe znaki z końca linii, którą możesz dodać do swojego
.vimrc
:Do tego jest również wtyczka DeleteTrailingWhitespace .
Podkreślanie białych znaków
Aby dokładnie sprawdzić, czy zniknęły wszystkie spacje końcowe, użyj:
Wpisz,
/ $
aby je znaleźć. Jeśli są jakieś, vim podświetli je dla ciebie.Użyj kolorów, aby je podświetlić:
Użyj widocznych znaków ( źródło ):
Zobacz także: Podkreśl niechciane miejsca
Aby domyślnie wyróżnić końcowe białe znaki, możesz skonfigurować
.vimrc
następujące czynności:Domyślnie usuwa białe spacje
Jeśli chcesz się upewnić, że wszystkie końcowe białe znaki w pliku są automatycznie usuwane podczas zapisywania, możesz dodać następujące polecenie do
.vimrc
:co nie jest zalecane, ponieważ spowoduje usunięcie końcowych spacji z każdego pliku zapisywanego przez użytkownika (nawet tam, gdzie może być wymagana biała spacja).
Zobacz też:
źródło
Trochę rozumiejąc odpowiedź Christophera Bottomsa : Jonathan Palardy napisał na ten temat dobry artykuł . W nim pisze funkcje,
Preserve(command)
które zachowują stan edytora (głównie pozycję kursora i wzorzec ostatniego wyszukiwania) podczas wykonywania dowolnego polecenia:Ma to tę zaletę, że jest uniwersalne, na przykład można go użyć do zastąpienia wszystkich spacji końcowych (tak jak robi to Jonathan), odwzorowując to na:
Możesz go również użyć do mapowania trybu wizualnego, aby po prostu usunąć końcowe spacje na wizualnie wybranych liniach:
I możesz go używać do innych połączeń, takich jak formatowanie całego dokumentu przy
=
zachowaniu swojego miejsca (tym razem użyj innego klucza, aby uniknąć konfliktu):W sumie uważam, że ta
Preserve(command)
funkcja jest przyjemnym narzędziem.źródło
@/
nie powinno się wymagać rozmyślania z (w tym przypadku i tak).winsaveview()
iwinrestview()
są o wiele lepsze.Inna wersja funkcji StripTrailingSpaces:
AKTUALNIE JEST BŁĄD W TEJ FUNKCJI (tej): opcja nie jest utrzymywana z powodu opcji „zasięgu”. po usunięciu działa bardzo dobrze, jednak udostępniam kod, aby uzyskać pomoc.
Jak widać, wykorzystuje on także funkcję Zachowaj widoczną powyżej, ale w nieco inny sposób.
Różnica polega na tym, że mogę wybrać zakres linii lub akapitu za pomocą,
vip
a następnie zakres:'<,'>
pojawi się automatycznie w wierszu polecenia.Pomysł pochodzi z postu Bez Hermoso .
źródło