2012-04-26 3 views
28

Per esempio, ho un gruppo di valori con un prefisso comune e suffisso, quali:È possibile utilizzare Trova e sostituisci su una stringa jolly in VIM?

fooVal1Bar; 

fooVal2Bar; 

fooVal3Bar; 

In questo caso, tutti i nomi delle variabili iniziano e terminano con foo e terminare con Bar. Voglio utilizzare una ricerca e sostituzione utilizzando i nomi delle variabili casuali trovati tra foo e Bar. Diciamo che ho già variabili Val1, Val2, Val3 e , Val2Old e Val3Old Definite. Vorrei fare un trovare una sostituzione, qualcosa sulla falsariga di:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old 

Questo si tradurrebbe in:

fooVal1Bar = Val1 + Val1Old; 

fooVal2Bar = Val2 + Val2Old; 

fooVal3Bar = Val3 + Val3Old; 

Spero che sia chiaro quello che voglio fare, non ho trovato nulla in aiuto o online per la sostituzione con stringhe jolly. Il massimo che ho potuto trovare riguarda la ricerca di stringhe jolly.

risposta

41

credo che si desidera

:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/ 

spiegazione:

\w\+ trova uno o più occorrenze di un carattere. Il precedente pippo e successivo Bar assicurano che questi caratteri corrispondenti siano solo tra uno foo e uno Bar.

\(...\) memorizza questi caratteri in modo che possano essere utilizzati nella parte di sostituzione della sostituzione.

& copie ciò che è stato abbinato

\1 è la stringa catturato nella parte \(....\).

+0

c'è una differenza tra il \ w \ + e *.? – dwcanillas

+7

'\ w \ +' corrisponde a uno o più in questo set: a-zA-Z0-9_ e '. *' Corrisponde a zero o più di qualsiasi cosa. – gpojd

+0

Ah ok. Ciò ha senso. Grazie! – dwcanillas

2

È necessario acquisire ciò che si desidera salvare. Provare qualcosa di simile:

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/ 

Oppure si può ripulire un po 'con magic:

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/