2009-02-20 7 views
35

Ich versuche, eine Textdatei für ein bestimmtes Muster zu suchen. Wenn dieses Muster auftritt, bedeutet dies, dass der Rest der Zeile nicht benötigt wird und daher gelöscht werden kann.Vim Suche nach einem Muster und wenn vorkommt, löschen bis zum Ende der Zeile

Ich habe versucht, mit den folgenden Befehlen, aber bisher waren nicht erfolgreich.

:%s/{pattern}/d$ 

:g/{pattern}/d$ 

Wenn jemand irgendwelche Vorschläge würden sie stark

Antwort

50

würde :%s/{pattern}.*// Arbeit geschätzt werden?

+0

ich folgend versucht löschen alles nach \\ in der folgenden Zeile auf der gesamten Datei verwenden. Beispielzeile mit: test schwarz braun blau \\ c \ d \ k - -:% s /\\.*// – Stryker

+0

sollte es nicht sein ':% s /\\\\.*//' (der Backslash muss rückgestrahlt werden) – mirod

+0

das war auch mein Gedanke, aber interessanterweise funktioniert es. Ihre Lösung funktioniert auch. Getestet. – Stryker

29

Alternativ folgende Arbeiten auch

:g/{pattern}/normal nd$ 

Für das, was Sie wollen, würde ich mit mirod Vorschlag gehen. Was ich gepostet habe, ist etwas flexibler und könnte in ähnlichen Situationen nützlich sein.

Erläuterung:

In jeder Zeile, in dem Muster übereinstimmt, werden die folgenden normalen Modus Befehle 'nd $' ausführen. Mit dem Cursor am Anfang der Zeile springt 'n' zum Muster und 'd $' löscht das Ende der Zeile.

+3

Sie können auch 'norm nD' verwenden, da' D' gleichbedeutend mit 'd $' ist. – Conner

-1
%s/\\(replay-pattern-later\\) pattern2/\1/gc 

Dies wird Muster1 wiedergeben, aber Muster2 beseitigen. Mit "/ gc" global anwenden (weitermachen) und nach jedem Vorkommen fragen.

1

Um ein Muster zu ersetzen und was sonst wilde die reguläre Ausdruck Karte .*

:1,$s/pattern.*//g 
Verwandte Themen