Wie kann ich in VIM alle Zeilen löschen, bis eine Regex erfüllt ist?

7

Ich bin mir sicher, dass dies beantwortet wurde, aber die Abfrage ist für Google etwas zu komplex.

Kurz gesagt, ich versuche viele veraltete Methoden aus einem Code zu löschen. Also überfliege ich die Datei und wenn ich eine Methode sehe, die ich entfernen möchte, lösche ich jede Zeile, bis ich eine Zeile sehe, die mit einem Tab beginnt, dann die Zeichenkette "def".

Ich denke, VIM sollte mir ein einfaches Makro dafür erstellen lassen, aber der Trick besteht darin, mir zu entkommen.

Hier ist die Art von Sache, die ich entfernen möchte.

%Vor%

Ich möchte den Cursor auf die Zeile mit "def Method_to_Delete" setzen und etwas tun, das bis "def Method_to_Keep"

gelöscht wird

Es muss einen besseren Weg geben als mehrere "dd" -Befehle.

    
Skip Huffman 09.08.2012, 11:56
quelle

2 Antworten

13

Vim-Suchen sind eigentlich Textobjekte! Das bedeutet, Sie können einfach:

%Vor%

Dann wiederhole einfach den Befehl mit . wie gewünscht.

    
guns 09.08.2012, 11:59
quelle
11

Verwenden Sie den :delete ex-Befehl mit einem Bereich

%Vor%

Erklärung

  • Der vollständige Befehl wäre :.,/Keep/-1delete
  • .,/Keep/-1 ist der Bereich, in dem der delete -Befehl ausgeführt wird
  • . bedeutet die aktuelle Zeile.
  • b / c verwenden wir einen Bereich und ausgehend von der aktuellen Position kann . angenommen und gelöscht werden
  • /Keep/ Suche nach der Zeile, die mit "Keep"
  • übereinstimmt
  • /Keep/-1 sucht nach der übereinstimmenden Zeile und subtrahiert dann eine Zeile
  • :delete kann mit :d kurzgeschlossen werden

Weitere Hilfe finden Sie unter

%Vor%     
Peter Rincker 09.08.2012 13:31
quelle

Tags und Links