vim: Verwenden Sie die Zeichenfolge aus der Suche im Befehl replace

16

Ich verwende oft den /Befehl vim search, um meine regulären Ausdrücke zu überprüfen (nur um zu sehen, was damit übereinstimmt). Danach verwende ich normalerweise den :%sBefehl replace, wobei ich diesen regulären Ausdruck aus der Suche als zu ersetzenden String verwende, z. B. suche ich zuerst nach einem solchen String:

/TP-\(\d\{5\}\)-DD-\d\{3\}

Es passt genau zu dem, was ich will, also ersetze ich:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

Aber ich muss hier nochmal ganz regexp schreiben. Normalerweise ist diese reguläre Ausdrücke viel länger, deshalb suche ich nach einer Lösung:

Gibt es eine Verknüpfung oder ein VIM-Skript zum direkten Einfügen dieses Suchmusters in den Befehl replace?

Ich benutze vim im Terminal (kein gvim).

kars7e
quelle

Antworten:

20

Im Allgemeinen bedeutet ein leerer regulärer Ausdruck, dass der zuvor eingegebene reguläre Ausdruck verwendet wird. Sie :%s//\1/gsollten also tun, was Sie möchten.

Geekosaurier
quelle
Woah, so einfach ist das! Genau das, was ich brauchte, danke.
kars7e
10
Auch, wenn Sie wollen , um zu überprüfen oder das zuletzt verwendete Muster zu ändern, können Sie bei gedrückter Ctrl-r dann /den Inhalt des einzufügen Suchmuster Register ( /) direkt in eine teilweise eingegebene Kommandozeile (zB direkt nach :%s/).
Chris Johnsen
das ist auch ein sehr nützlicher Hinweis. Danke @Chris! +1
kars7e
Was ist, wenn ich nach "\ 1" eine Zahl wie 23 eingeben möchte? Wie vermeide ich, dass es als "\ 123" interpretiert wird?
Champ
@Champ Da Rückverweise nur bis gehen \9, gibt es keine Mehrdeutigkeit.
Kusalananda
4

Eine andere gute Möglichkeit, frühere Regex-Suchen sowie Ex-Befehle anzuzeigen und Änderungen daran vorzunehmen, besteht darin, diese Befehle im normalen Modus zu bearbeiten. Von diesem Modus aus haben Sie alle Ihre Fähigkeiten, einschließlich Kopieren und Einfügen.

  • Suchen: Versuchen Sie statt ?oder /zum Suchen q/oderq?
  • für Ex-Befehle, anstatt zu :versuchenq:
  • um diesen Modus zu verlassen, benutzen Sie CtrlC

Um mehr zu lesen, siehe :help q:.

Ryan Carney
quelle