Wie löscht man Linien um ein Suchmuster in vim?

7

In einer Datei möchte ich den Kontext um ein Suchmuster löschen können.

Mit Kontext meine ich: a) 'n' Zeilen vor dem Muster b) 'n' Zeilen nach dem Muster c) 'n' Zeilen nach und vor dem Muster d) tue a, b, c, indem du auch die Musterlinie löschst e) tue a, b, c, ohne die Musterzeile zu löschen

Gibt es eine Möglichkeit, es mit :g/ oder :%s oder auf andere Weise zu machen? Ich kann das mit Makros machen, aber das ist nicht das, wonach ich suche.

Hier ist ein Beispieltext:

%Vor%     
Aman Jain 24.06.2013, 18:38
quelle

2 Antworten

16

Grundsätzlich ist der Schlüssel das

  • :d kann ein numerisches Argument hinter sich haben, das die Anzahl der zu löschenden Zeilen angibt
  • Sie können einen Offset nach einem Muster angeben, z. %Code%

Anmerkungen:

  • Wenn Sie dies für alle Instanzen von pattern tun, verwenden Sie :/patt/+3 anstelle von :g/patt/... (danke an Peter Rincker für die Erinnerung)
  • alle Leerzeichen in den ex-Befehlen unten sind optional, ich lege sie aus Gründen der Übersichtlichkeit dort hin.

Um n Zeilen vor dem Muster zu löschen,

%Vor%

Löschen von n Zeilen vor dem Muster und der Musterzeile

%Vor%

wo :/patt/... = p + 1

Um n Zeilen nach dem Muster zu löschen,

%Vor%

Löschen von n Zeilen nach dem Muster und der Musterzeile

%Vor%

wo n = p + 1

Um m Zeilen vor und n Zeilen nach dem Muster zu löschen (hier ein bisschen betrügen, da es zwei Befehle gibt),

%Vor%
  • Das funktioniert, weil der Cursor nach dem ersten Befehl n auf der Musterzeile
  • steht

Löschen von m Zeilen vor dem Muster, der Musterlinie und n Zeilen nach dem Muster

%Vor%

wo d = q + m + n

    
doubleDown 24.06.2013 18:58
quelle
4

In jedem Fall ist es möglich, entweder einen relativen Bereich oder einen Offset und ein Argument für d zu verwenden. Die logisch logischere Option hängt vom jeweiligen Fall ab; Ich neige dazu, explizite Bereiche in den Inclusive-Fällen zu verwenden (da Sie in der Regel die Hälfte des Bereichs weglassen können), und andernfalls ein Argument für d .

Vor dem Muster, inklusive:

%Vor%

Vor dem Muster, exklusiv:

%Vor%

Nach dem Muster inklusive:

%Vor%

Nach dem Muster, exklusiv:

%Vor%

Vorher und nachher, inklusive:

%Vor%

Vorher und nachher, exklusiv:

%Vor%

Beachten Sie, dass diese Befehle mit E16: Invalid range fehlschlagen, wenn der Bereich über den Anfang oder das Ende der Datei hinausgeht.

    
Nikita Kouevda 24.06.2013 19:19
quelle

Tags und Links