ve

2012-08-16 43 views
6

Genellikle böyle vim arama ve değiştirmek istediğiniz Verimlilik değiştirin:ve

:%s/<search_pattern>/<search_pattern>_foo/g 

ben yerine değerindeki <search_pattern> başvuruda böylece bu sözdizimi daha verimli hale getirmek için bir yol var mı? Sanırım grup ismine/numaraya geri göndermeye benzer bir şey olurdu, ancak bu konuda hiçbir belge bulamıyorum.

cevap

13

yerine eşleşen deseni temsil etmek & karakteri kullanın:

:%s/<search_pattern>/&_foo/g 

Alternatif sen \0 kullanabilirsiniz, tüm eşleşti modeli için bir arka referanstır ve bu yüzden hatırlamak daha kolay olabilir:

:%s/<search_pattern>/\0_foo/g 

yo, @kev sayende görün

:help sub-replace-special Ve u replasmanı __foo_ tarafından değiştirilmesi, \zs kullanarak arama dizesinin sonunda boş bir desen zorlayabilirsiniz:

:%s/<search_pattern>\zs/_foo/g 

Bu şu anlama gelir: __foo_ ile arama dizisinin ucunu değiştirin.

+3

':% s/ \ zs/_foo/g' işleri çok. – kev

3

Tüm arama kalıbı için &'u kullanabilir ya da kalıpların bir bölümünü eşleştirmek için grupları kullanabilirsiniz. & Kullanılması: Bu aradığınızı başarmak istiyorum

:%s/<search_pattern>/&_foo/g 

. Biraz daha karmaşık kullanım gruplarına ihtiyacınız varsa. Bir grup oluşturmak için, arama modelinin bir bölümünü (kaçtı) parantez ile çevirin. Daha sonra \n ile n'un grup numarası olduğunu referans alabilirsiniz. Bir örnek daha iyi açıklar.

Aşağıdaki dosya:

bread,butter,bread,bread,bread,butter,butter,etc 

Sen bread and butter için bread,butter herhangi bir örneğini değiştirmek istiyorum:

:%s/\(bread\),\(butter\)/\1 and \2/g