2013-06-24 7 views
7

W pliku chcę móc usunąć kontekst wokół wzorca wyszukiwania.Jak usunąć linie wokół wzorca wyszukiwania w vim?

Przez kontekst to znaczy: a) 'n' linii przed wzór b) 'n' linii na wzór c) 'n' linii przed i po dla wzoru d) DO a, b, c, usuwając liniowym wzorem, jak dobrze e) zrobić, b, c, bez kasowania wzór linii

Czy jest jakiś sposób, aby to zrobić za pomocą :g/ lub :%s lub w jakiś inny sposób? Mogę to zrobić za pomocą makr, ale tego nie szukam.

Oto przykładowy tekst:

search_pattern random text 1 
line below search pattern(delete me) 
abc def 
pqr stu 
... 
line above search pattern(delete me) 
search_pattern random text 2 
line below search pattern(delete me) 
... 

Odpowiedz

15

Zasadniczo kluczem jest to, że

  • :d może podjąć argument liczbowy po który określa liczbę wierszy, aby usunąć
  • można określić przesunięcie po wzorze, np :/patt/+3

Uwagi:

  • Jeśli robisz to do wszystkich wystąpień wzorca, używają :g/patt/... zamiast :/patt/... (dzięki Peterowi Rincker dla przypomnienia)
  • wszystkie przestrzenie w ex poniższe polecenia są opcjonalne, umieszczam je tam dla zachowania przejrzystości.

celu usunięcia n linii przed wzoru,

:/patt/-n d n 

celu usunięcia n linii przed wzór i linijka wzór

:/patt/-n d p 

gdzie p = n + 1


celu usunięcia n wierszy na wzór,

:/patt/+ d n 

celu usunięcia n wierszy na wzór i linijka wzór

:/patt/ d p 

gdzie p = n + 1


Aby usunąć m wierszy przed i n wierszy na wzór (trochę oszukiwanie tutaj, ponieważ jest to 2 komendy),

:/patt/-m d m | + d n 
  • to działa, ponieważ po pierwszym poleceniu d, kursor będzie na wzór linii

Aby usunąć m linii przed wzór, wzór linii, a n wierszy na wzór

:/patt/-m d q 

gdzie q = m + n + 1

+2

Działa to doskonale dla 1 wystąpienia wzorca. Po prostu dodaj ': g' dla wszystkich wzorów. Przykład: ': g/pat/-3d3'. Zobacz ': h: g', aby uzyskać dodatkową pomoc. –

4

W każdym razie, możliwe jest wykorzystanie zarówno względnym lub przesunięcie i argumentem d. Bardziej logicznie prosta opcja zależy od konkretnego przypadku; Zwykle używam wyraźnych zakresów w przypadkach włączających (ponieważ zazwyczaj można pominąć połowę zakresu) i argumentu do d w przeciwnym razie.

Przed wzoru, włącznie:

:g/regex/-3,d 
:g/regex/-3d4 

Przed wzór ekskluzywna:

:g/regex/-3,-1d 
:g/regex/-3d3 

Po wzoru, włącznie:

:g/regex/,+3d 
:g/regex/d4 

Po wzór ekskluzywna:

:g/regex/+1,+3d 
:g/regex/+1d3 

Przed i po, włącznie:

:g/regex/-3,+3d 
:g/regex/-3d7 

Przed i po ekskluzywna:

:g/regex/-3,-1d|+1,+3d 
:g/regex/-3d3|+1d3 

Zauważ, że te polecenia nie powiedzie się z E16: Invalid range jeśli zakres mija na początku lub na końcu pliku .

Powiązane problemy