2017-02-02 1 views
1

In Vim möchte ich alle &anyWord durch C_LOC(anyWord) ersetzen. Ich versuche, die folgenden:Vim Substitution Regex

:%s/&\w*/C_LOC(\w*)/g

Dieser Befehl jedes &anyWord erkennt. Das Problem ist, dass es durch C_LOC(\w*) und nicht durch C_LOC(anyWord) ersetzt wird.

+2

Seien Sie vorsichtig, dass ein einzelnes '&' in der Datei ersetzen würde. –

+0

Danke für den Hinweis, ich werde/gc statt/g zur Bestätigung verwenden. – Sergio

+2

Oder verwenden Sie '+' anstelle von '*', um sicherzustellen, dass nach '&' mindestens ** Wortzeichen vorhanden sind. –

Antwort

3

Sie brauchen eine Erfassungsgruppe im Muster und eine Rückreferenzierung im Ersatz zu verwenden:

:%s/&\(\w*\)/C_LOC(\1)/g 

Wenn Sie sehr Magie-Modus benötigen, die ( und ) im Muster nicht entgangen sein sollten.

Auch, wenn Sie wollen mindestens 1 Wort Zeichen ersetzen \w* mit \w\+ (gleicher Note über + wie ( und ) Flucht).

0

Es gibt einen anderen Weg.

:%s/\v(\&)@<=\w+/C_LOC(&)/

Ampersand in der zweiten (ersetzen) Teil bedeutet Musterteil.