Usuń białe znaki dla zestawu linii w edytorze Vima

12

W pliku mam tekst podobny do następującego:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Muszę usunąć puste miejsce przed każdą linią. Dla jednej linii to, co robię 0dw

Mogę powtórzyć to samo polecenie za pomocą. ale ręcznie nawigując do następnych linii.

Ale czy istnieje sposób na zastosowanie „0dw” do tego bloku linii?

Przypuszczam, że istnieje sposób na użycie makr, ale nie korzystałem z nich wcześniej. Ale chętnie się ich nauczę, jeśli nie ma innego wyboru.

saiy2k
źródło
+1 fajne pytanie, w końcu robię dużo tego samego. Witamy na stronie.
Sardathrion - przeciwko nadużyciom SE

Odpowiedzi:

10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Dowiedz się więcej tutaj na http://vim.wikia.com/wiki/Remove_unwanted_spaces

Jeśli chcesz to zrobić dla określonego zakresu linii:

:19,25s/^\s\+//

BTW, najlepszym sposobem na rozpoczęcie nauki vima jest wykonanie vimtutorpolecenia, nauczy Cię, jak używać Vima w edytorze Vima.

Nikhil Mulley
źródło
1
: le był niesamowity i wielkie dzięki za alternatywy i link :)
saiy2k
3
+1 za wzmiankę vimtutora oraz dobrą odpowiedź.
Sardathrion - przeciwko nadużyciom SE
1
Wybierz odpowiednie linie, używając Vi przesuwając kursor, aby rozszerzyć wybór linii. Następnie naciśnij, :aby automatycznie wejść '<,'>, a następnie możesz użyć wyrażenia regularnego Nikhila.
UncleZeiv,
1
innym sposobem wykonania zakresu linii (ponieważ zawsze zapominam o numerach linii) jest zaznaczenie 2 linii i operowanie znakami. Przykład, przejdź do linii 19 i naciśnij „ma”, przejdź do linii 25 i naciśnij „mb”, a następnie zrób :'a,'bs/^\s\+//.
Patrick
7

Alternatywnym sposobem na to jest użycie narzędzi wcięcia VIM (zwykle powiązanych z </ >). Najpierw potrzebujesz sposobu, aby wskazać, które linie zostaną zmienione. Możesz użyć trybu selekcji wizualnej lub dowolnego innego sposobu określania zakresu linii, których dotyczy zmiana, a następnie użyj arbitralnie wysokiej liczby lub poziomów wcięcia, aby je usunąć. 9<zwykle robi to całkiem nieźle, usuwając co najmniej 9 poziomów możliwych wcięć (tabulatorów / spacji) z bieżących linii.

Caleb
źródło
3

Mam podejście, aby to zrobić, wykonując proste czynności:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Objaśnienie trzeciego kroku:

0 nawiguje do początku linii.

dw usuwa słowo (puste spacje).

normalstosuje polecenie 0dw.

'<,'> powtarza normalną dla wszystkich wybranych linii w trybie wizualnym.

saiy2k
źródło
1

ctrl+vpozwala zrobić coś podobnego do tego, czego chcesz, ale nie do końca. Możesz wybrać blok wizualny i zastosować jedno polecenie do partii.

Sardathrion - przeciw nadużyciom SE
źródło
2
wybrałem te wiersze w trybie blokowym i to polecenie zadziałało:: <<, '> normal 0dw
saiy2k
1
@ saiy2k :normaljest tutaj ważną rzeczą i myślę, że jest to najlepsza odpowiedź tutaj. Czy możesz to opublikować jako odpowiedź?
Gilles „SO - przestań być zły”,