2010-10-13 4 views
22

Ich möchte den Inhalt eines Registers als Suchmuster in Vim verwenden.Verwenden Sie einen Registerwert als Suchmuster

Ich möchte dies von der Befehlszeile aus tun, so kann ich nicht die <c-r> Syntax verwenden, da dies eine interaktive Sitzung voraussetzt.

Es ist möglich, ein Register zu verwenden, als Muster ersetzen, wie diese

:%s/foo/\[email protected]/g 

jedoch diese Syntax als Suche mit Muster nicht

:%s/\[email protected]/foo/g 

es

gibt funktioniert
E64: \= follows nothing 
E476: Invalid command 
+0

Aber die meisten Leute, die hier kommen, sind wahrscheinlich auf der Suche nach '' : [relevante Frage + Antwort] (https://stackoverflow.com/q/101258/1143274). –

Antwort

11

Ich glaube nicht, es direkt möglich ist, aber Sie können :exe dies zu erreichen, verwenden:

:exe '%s/' . @a . '/foo/g' 
+0

Ich bevorzuge diese Antwort, da ich mehrere Variablen in das Skript übergeben kann. Ich muss zum Beispiel den Suchbereich durch zwei Variablen bestimmen, die ich verwenden kann: ': exe '/ ^'. @ein . '/,/^'. @b. "/ s /". @c. "/". @ d. "/ g". – lerner

11

In einem Muster (nicht das Ersatzteil), \= für „0 oder 1 Mal“ steht (es ist ein Synonym für \? Put sollte gegenüber \? bevorzugt werden, da letzteres bedeutet ein Literal ? beim Rückblick.

Weitere Details finden Sie unter :help /\= und help pattern.

Warum nicht:

let @/[email protected] 
%s//foo/g 
+0

Ich habe Al's Antwort akzeptiert, da es auch für andere Befehle wie '' vimgrep'' (die ich auch kontrollieren wollte) funktioniert. – pkit

+1

Kein Problem. Entschuldige dich nicht bei der Auswahl einer Antwort, wir wissen, dass du nur eine auswählen kannst. – Benoit

10

Sie können dies mit dem / Register

Dies löst nicht das allgemeine Problem, aber es scheint mir, dass die / Register in dieser Hinsicht besondere ist: Wenn Sie den Suchbegriff leer lassen, verwendet er das, was im Register / steht. nämlich, was immer du zuletzt gesucht hast.

Also, wenn Sie foo mit dem Inhalt @a ersetzen möchten, können Sie dies tun:

  1. Suche nach foo
  2. %s//\[email protected]/g (oder einen Text markieren und starten :s Eingabe nur in diesem Bereich zu ersetzen
  3. )
Verwandte Themen