2012-04-26 10 views
28

, ben gibi ortak bir önek ve sonekli değerlerin bir grup vardır: Bu durumdabulup VIM bir joker dize üzerinde yerini kullanmak mümkün mü? Örneğin

fooVal1Bar; 

fooVal2Bar; 

fooVal3Bar; 

, bütün değişken isimleri başlar ve foo ile biter ve Bar ile sona erer. Ben bulunan bir şeyi kullanmak ve foo ve Bar arasında bulunan rasgele değişken adları kullanarak değiştirmek istiyor. Zaten Val1, Val2, Val3 ve Val1Old, Val2Old ve Val3Old Tanımlanmış değişkenler olduğunu varsayalım. Ben de bir şey bulamadı, ben ne yapmak istediğinizi açıkça umut

fooVal1Bar = Val1 + Val1Old; 

fooVal2Bar = Val2 + Val2Old; 

fooVal3Bar = Val3 + Val3Old; 

: Bu neden olacaktır

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

: Ben bir bir yerine bulmak çizgisinde bir şey yapacağını vim yardım veya joker dizeleri ile değiştirerek hakkında çevrimiçi. En çok bulabildiğim joker karakter dizilerini aramaktı.

\w\+ bir karakterin bir veya daha fazla oluşumları bulur:

cevap

41

Sana

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

açıklama istiyorum inanıyoruz. Yukarıdaki foo ve Bar'un izlenmesi, bu eşleşen karakterlerin foo ve Bar arasında olmasını sağlar.

\(...\) bu karakterleri, değiştirmenin değiştirilme bölümünde kullanılabilecek şekilde depolar.

\1

eşleşti ne

& kopya \(....\) parçası yakalanan dizedir.

+0

\ + ve w \ arasında bir fark yoktur * Böyle bir şey deneyin.? – dwcanillas

+7

'\ w \ +' bu sette bir veya daha fazla eşleşir: a-zA-Z0-9_ ve '. *' Sıfır veya daha fazla şeyle eşleşir. – gpojd

+0

Ah tamam. Bu mantıklı. Teşekkürler! – dwcanillas

2

Kaydetmek istediğiniz şeyi yakalamanız gerekir.

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

Yoksa magic ile biraz Temizleriz:

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