vim: usuń pierwsze 2 spacje dla wielu linii

79

Jaki jest najłatwiejszy sposób usunięcia pierwszych 2 spacji z każdej linii przy użyciu VIM? Zasadniczo jest to powtarzanie „2x” dla każdej linii.

Wyjaśnienie: tutaj założeniem jest, że pierwsze 2 znaki to spacje. Tak więc pytanie dotyczy wykonywania wcięć dla wielu wierszy jednocześnie.

twimo
źródło
Czy jest to konkretnie biały znak, czy pierwsze dwa znaki, niezależnie od tego, czym są?
Jason Down,
To pierwsze dwie postacie. Zakładając, że pierwsze dwa znaki to spacje.
twimo
Pokazałem sposób, aby to zrobić poprzez wyszukiwanie i zamianę w trybie byłego edytora. Jeden sposób gwarantuje, że zrobi to tylko dla linii zaczynających się od dwóch spacji (i usunie tylko dwie spacje). Drugi po prostu odstrasza pierwsze dwie postacie, niezależnie od tego, kim są.
Jason Down
Pytania Vima nie są nie na temat w SO (sprawdź dyskusje na meta i ... SO FAQ). Ponadto wcięcie jest istotne dla rozwoju ...
Luc Hermitte

Odpowiedzi:

93

Więcej opcji. Możesz zdecydować, który jest „najłatwiejszy”.

Usuń pierwsze 2 znaki z każdego wiersza:

:%normal 2x

Usuń pierwsze 2 znaki z każdego wiersza, tylko jeśli są to spacje:

:%s/^  /

Zauważ, że ostatni ukośnik jest opcjonalny i znajduje się tylko tutaj, abyś mógł zobaczyć dwie spacje. Bez ukośnika to tylko 7 znaków, w tym :.

Przesuń wcięcie w lewo dla każdego wiersza:

:%normal <<
bhinesley
źródło
11
Uwielbiam to, że w Vimie jest 30 różnych sposobów na zrobienie czegoś. Pytania takie jak te przywołują rzeczy, o których nigdy nie wiedziałeś. Nie miałem pojęcia o% normalnej.
Jason Down,
Dziękuję za wyjaśnienie ostatniej kreski. To jest pomocne.
ryanjdillon
1
Dodam, że %znak oznacza po prostu „wykonaj to polecenie dla każdego wiersza dokumentu, a nie tylko dla bieżącego wiersza”. Myślę. Nie mogę znaleźć dużo dokumentacji na ten temat.
Sammaron
119
  1. Wejdź w tryb blokowania wizualnego za pomocą Ctrl-V(lub Ctrl-Qjeśli używasz Ctrl-Vdo wklejania);
  2. Wybierz obszar do usunięcia za pomocą strzałek;
  3. Następnie naciśnij, daby usunąć wybrany obszar.
  4. naciśnij Esc
Tom Kerr
źródło
7
ctrl-v, aby wybrać znaki do usunięcia, a następnie d, aby wyciąć.
Henrik K
2
Najlepsza odpowiedź oznaczona gwiazdką! :-)
Nikos Alexandris
To nie działa we wszystkich vimach, których używam, ale dla tych, które działają, jest to bardzo wygodne i fajnie jest móc wizualizować obszar, który usuwasz, zanim to zrobisz.
Searchengine 27
Może inne domyślne powiązanie dla trybu bloków wizualnych? Może różnica między starszą dystrybucją unixów VI (w przeciwieństwie do VIM).
Tom Kerr,
To prawdopodobnie najłatwiejsza i najbardziej sensowna odpowiedź.
Willem van Ketwich
13

Możesz także użyć wyszukiwania i zamiany (w edytorze byłego, dostępnym za pośrednictwem :znaku):

Usuń pierwsze dwa znaki bez względu na wszystko:

%s/^.\{2}//

Usuń pierwsze dwa białe znaki (muszą znajdować się na początku i oba muszą być białymi znakami ... każda linia nie spełniająca tych kryteriów zostanie pominięta):

%s/^\s\{2}//
Jason Down
źródło
2
/ G na końcu jest zbędne. Robisz tylko jedno dopasowanie w linii.
bhinesley,
imo to świetne rozwiązanie
Victoria Stuart
7

Zakładając a shiftwidth=2, a następnie używając przesunięcia z zakresem%

:%<
Peter Rincker
źródło
4

Dwie spacje czy dwa znaki? ( 2xrobi to drugie.)

:[range]s/^  //

usuwa dwa puste miejsca na początku każdego wiersza; użyj %(odpowiednik 1,$) tak [range]samo, jak to zrobić dla całego pliku.

:[range]s/^..//

usuwa pierwsze dwa znaki z każdego wiersza, jakiekolwiek one są. (Zauważ, że usuwa dwa znaki , niekoniecznie dwie kolumny ; znak tabulatora liczy się jako jeden znak).

Jeśli naprawdę zmieniasz wcięcie, możesz użyć <polecenia, aby je zmniejszyć, lub >polecenia, aby je zwiększyć. Ustaw, shiftwidthaby kontrolować, jak daleko się przesuwa, np

:set shiftwidth=2
Keith Thompson
źródło
3

Spróbowałbym jednego z dwóch podejść:

  1. Wykonaj edycję kolumn w bloku do usunięcia za pomocą Ctrl+V(często mapowane Ctrl+Q).
  2. q1Zarejestruj makro w pierwszym wierszu za pomocą (lub dowolnej innej liczby / litery, którą chcesz oznaczyć rejestr nagrywania), a następnie powtórz to makro wiele razy, używając @1(aby użyć poprzedniego przykładu. Jeszcze lepiej, użyj poprzedniej liczby, aby określić, ile razy do uruchomienia - na przykład 10@1aby uruchomić to makro 10 razy, ale zależy to od tego, co nagrałeś - pamiętaj, aby przewinąć kursor do tyłu 0lub upuścić jedną linię j, jeśli jest to istotne.
sa125
źródło
3

Dodałbym też: naucz się konfigurować wcięcia dla vima. Wtedy proste gg=Gzałatwi sprawę.

Luc Hermitte
źródło