2012-01-26 13 views
13

Bir yapılandırma dosyasını düzenlemeye çalışıyorum ve belirli bir dize her eşleştiğinde belirli bir satır satırını (yeni satırda) eklemek istiyorum ... aradığım her şey arama yapar ve değiştirir, arama ve ekleme için arıyorum ...Dize için arama yapın ve satır ekleyin vi/vim

cevap

13

vim\r yeni hattır.

:g/specific string/s/.*/&specific line of code 

g komut specific string içeren tüm satırları getirir ve daha sonra bu hatlara s yedek komutunu uygulayın: Yani bu ne yapardım bu

%s/search string/&\rnew code/ 
+1

Açıklama için. Yerine kullanıldığında ve işareti ekleyerek yapar? Veya değiştirdiğiniz satırı içeriyor, böylece "% s/search string/\ rnewcode & /" ile başlayabilirsiniz? – VolatileStorm

+0

@Jaypal '% s /^.* arama dizesi. * $/& \ Rnew code /' daha iyi olabilir mi? Seninki orijinal çizgiyi kırabilir. Örneğin, satır "dizge = xyz" veya "foosearch dize = arama dizgisi" – Kent

+1

"\ r", yedek dizgede yeni satır ise. Arama modelinde '\ n' yeni satırdır. – Benoit

0

gibi bir şey yapabilirsiniz. ": G" komutu muhtemelen daha iyidir s komut kullanıyorum düşünüyorum, onun içeriği ile bütün çizgi artı şahsen specific line of code

HTH

13

yerine ": s" Bu sorunun.

:g/key/norm owhat ever you want 

yapacak metni:

foo 
bar 
key 
foo2 
bar2 
key2 
blah 

için: Eğer desen içeren çizgisinin üzerinde yeni bir satır eklemek istiyorsanız

foo 
bar 
key 
what ever you want 
foo2 
bar2 
key2 
what ever you want 
blah 

, sadece küçük "o" olarak değiştirin "O".

+0

arama isabını, norm o 'is' put = 'ne olursa olsun' daha iyi bir şekilde ekler. – Benoit

+0

@Benoit yep, put veya put! – Kent

+0

Eğer 'autoindent' seçenek kümesine sahipseniz, 'norm o' ve 'norm O', aradığınız çizgi ile aynı girintiyi kullanabilecekleri olası bir avantaja sahiptir. – bdesham