2014-05-17 12 views

Antwort

11

Sie können dies mit einem Ersatzbefehl tun.

Damit wird Register a an was auch immer die Regex angepasst. Das Flag n wird den Befehl in einer Sandbox ausführen, so dass nichts tatsächlich ersetzt wird, aber die Nebenwirkungen der Anweisung auftreten.

Sie wollen wahrscheinlich das Register mit

:let @a='' 
+1

Würde nicht ein Großbuchstaben-Register in dem 'setreg mit ('A', submatch (0))' einfacher sein? –

+0

@PeterRincker Ja, ja, würde es. Ich wusste nicht, dass es einen Großbuchstaben akzeptieren würde (ich habe es auch nicht getestet ...) – FDinoff

+4

Der nette Teil über die Verwendung der Großbuchstabenversion ist, dass Sie 'setreg()' 's dritten Parameter verwenden können, um es zu linewsise zu machen Sie wollen. '% s/foo/\ = setreg ('A', Unterabfrage (0), 'V')/n' –

0

zuerst leeren Wenn Sie nur einen Teil des Spiels greifen möchten, können Sie mit \zs und \ze arbeiten. Sie benötigen Erfassungsgruppen nur für mehrere Teile oder Neuanordnungen.

Mein ExtractMatches plugin bietet (unter anderem) ein bequemer :YankMatches Befehl, unterstützt auch Ersatz:

:[range]YankMatches[!] /{pattern}/{replacement}/[x] 
0

Sie kann auch reißt alle angepassten Linie zwischen zwei Sitzungen zu spitzen Registern.

Als Beispiel:

:11,21s/regex/\=setreg('A', submatch(0))/n 

Spiele regrex Gruppe von der Linie 11 21 auszukleiden, anstatt die gesamte Datei.

:/^ab/,/^cd/s/regex/\=setreg('A', submatch(0))/n 

Spiele regrex Gruppe aus der Zeile, die mit ab stards mit cd auszukleiden.

Mehr über Sitzung: http://vimregex.com/