2013-01-08 5 views
12

Ich bin sicher, das ist einfach, ich vermisse nur ein oder zwei Zeichen.Global append an Zeile mit passendem Begriff in vim

Ich muss nach einem bestimmten Begriff in einer Datei suchen, und wenn ich es finde, muss ich etwas an diese Zeile anhängen. Und ich möchte das für jede Zeile mit dem Spiel tun.

Um es einmal zu tun, ich kann dies tun:

/Thing to find/s/$/ Stuff to append/ 

Einfach. Und wenn mein „Ding zu finden“ am Ende der Leitung war konnte ich dies tun:

%s/\(Thing to find\)$/\1 Stuff to append/ 

auf jeder passenden Zeile die gleiche Sache zu tun

Aber wie mache ich das erste, was auf jedem Linie?

Ich glaube, ich

%s/\(Thing to find.*\)$/\1 Stuff to append/ 

tun könnte, aber das fühlt sich ungeschickt und würde es komplizierter machen, wenn die Sache auf einer Linie mehr als einmal war zu finden.

Ich denke, dass es einen Weg geben muss, meine erste Suche überall zu machen, aber ich habe Schwierigkeiten, eine prägnante Beschreibung zu schreiben, um es zu googeln.

So mächtige Stacker, will jemand Nerd mich mit einer Zwei-Byte-Lösung schlagen?

Antwort

24

Der :g// Befehl ist das, was Sie suchen - es führt einen Befehl in jeder Zeile mit einem Muster übereinstimmen:

:g/Thing to find/ s/$/ Stuff to append/ 
+1

Oh du bist f-ing mich verarschen. Ich habe das nicht versucht? Lass mich nachsehen. –

+7

Kopf, treffen Sie sich mit dem Schreibtisch. –

+0

Das funktioniert perfekt. Vielen Dank. Kann ich so tun, als wäre es Montag? –