2009-10-14 10 views
21

Jak usunąć pierwsze słowo z każdej linii w Vim?Usuń pierwsze słowo z każdej linii

Co powiesz na wzór w każdym wierszu?

+4

Myślę, że to pytanie należy do SuperUser.com –

+0

dlaczego tak uważasz? vi jest również językiem skryptowym. To pytanie powinno zostać przeniesione, a nie zamknięte, jeśli cokolwiek. – vehomzzz

+0

Zamknięte, ponieważ należy do superuser.com, jest takie samo, jak przeniesione do superuser.com. – tvanfosson

Odpowiedz

19

Chciałbym użyć coś jak poniżej:

:%s/^\w+\s+// 

wyrażenia regularnego dopasuje jeden lub więcej "słów" od początku linii, a następnie co najmniej jedna biała spacja. Usunie to słowo i wszelkie następne spacje. Jeśli linia może zawierać tylko jedno słowo - a nadal chcesz je usunąć - możesz użyć alternacji, aby dopasować białe spacje lub koniec linii.

:%s/^\w+(\s+|$)// 
+0

Możesz wyrazić to bardziej ogólnie: :%: s/^ \\ (\ w \ {- 1,} \\) \\ (\ W \? \\)/\ 2/ W ten sposób również nie wyrzucaj niczego, co kończy znak słowny. (Musisz również sprawdzić, który dialekt wyrażeń regularnych mówisz ...) –

3

Pierwsze słowo (gdzie słowo jest definiowane jako bez spacji)

:%s/^\s*[^ ]* //g 

Usuń wzór:

:%s/< insert pattern here >//g 
27

Idąc za tajemnicze tutaj, w prawdziwym stylu VI:

[email protected] 

Randy stałe to w komentarzach do pracy na więcej niż 100000 linii:

[email protected]@q 

Dla tych, wychodząc w przypadku Vima rozkłada się na:

gg - Go to first line 
qq - Record a macro into register 'q' 
[email protected] - The macro: 
      dw - delete word at cursor 
      j - go down one line 
      @q - run the macro in register 'q' 
q  - Stop recording the macro 
@q - Execute the macro in register 'q' 

W istocie makro jest rekursywne - usuwa słowo, przesuwa linię w dół, a następnie wywołuje się ponownie, powtarzając dla każdej linii do końca pliku. Ostateczne "@q" to początkowe (ręczne) wywołanie potrzebne do ustawienia makro w każdej linii.

+2

-1 - nie wiesz, co to jest "prawdziwy styl vi", ale nie ma sensu robić tajemniczych, nieprzyjaznych rzeczy, żeby się pochwalić. istnieje doskonale czytelne rozwiązanie, które jest również bardziej ogólne. –

+3

Ah, ale ktoś już opublikował "poprawne" rozwiązanie. To było bardziej zgodne z kodem golfowym. "Prawdziwy styl vi" był ironicznym przesunięciem w edytorze, w którym: wq! to poprawny sposób na wyjście bez zmian. To nie jest najbardziej przyjazna dla użytkownika bestia. Pełne ujawnienie: Kocham vi i używam go jako głównego edytora. Pełna jawność: składnia polecenia vi nie jest zbyt zrozumiała. –

+9

ggqqdwj @ qq @ q będzie działać na dowolnej liczbie linii, a nie tylko na plikach z liniami <100000. Tbh, to "tajemnicze" było tym, co przyszło mi wcześniej na myśl o regularnym wyrażeniu. –

4

Co z tym?
:% wyciąć -s -d” '-f2-

25

: normal na ratunek:

:%norm dw 

To w zasadzie powtórzenie argumentów jakbyś wpisując je w normalny (!' Non-edit ").

Od: pomoc:

: [!] Normą [in] {polecenia}

Execute normalnych poleceń menu {polecenia}.

Umożliwia to wykonywanie poleceń trybu normalnego wpisanych na linii poleceń . {Polecenia} jest wykonywane tak, jak zostało wpisane.

+0

Jak to działa? – vehomzzz

+0

Właśnie dodałem więcej informacji do mojej odpowiedzi. –

+5

Po uruchomieniu ': norm dw' w linii, która była wcięta, usuwałoby wcięcie zamiast pierwszego słowa. Uruchomienie ': norm^dw' zawsze usunie pierwsze słowo. – nelstrom

1
:%s,^[^ ]*,, 

Od początku linii dopasuj wszystko, ale nie odstęp i zastąp bez żadnego.

+0

Należy zauważyć, że nie usunie ona niczego na liniach z wcięciem i że usunie to, co Vim wywołuje WORDS (oddzielone białymi spacjami), a nie słowa. –

Powiązane problemy