2016-03-10 23 views
6

Belirli bir kelimenin ortaya çıkması için bir dosya aramak ve bu kelimeyi bununla değiştirmek için kullanıcıya sormak mümkün mü? Aynı şeyi tekrar yapın, ya yeni bir değiştirmeyi yazarak veya geçmişinizden bir şey kullanarak, tüm sözcükler değiştirilinceye veya kullanıcı çıkana kadar. Değiştirmek istemediğim kelimeleri atlamak için seçim yapmak istediğimi unutmayın. Sadece VIM tüm olayları bul ve gir ile değiştir

:%s/value_one/value_two/gc 

kullanılarak

Ben aklınızdaki her farklı değiştirilmesi için bu komutu çalıştırmak zorunda anlamına gelecektir. Bu mümkün mü yoksa bu iş akışında bir sorun var mı? Bunu, yalnızca değiştirilecek tek değişkene ihtiyaç duyan boilerplate kodunu yapıştırırken kullanırdım.

cevap

12
aradığın

. İsterseniz, giriş için varsayılan bir değer sağlayabilmeniz gerekir.

+0

paylaşım için teşekkürler Bir çekicilik gibi çalıştım. Tam olarak aradığım şey bu mu? – ExcellentAverage

+0

Yanlış olabilirdim, ancak olmamalı:% s/value_one/\ = giriş ('replace <'. Submatch (0). '> With:')/gc. Value_one'dan sonra çift eğik çizgi bana 'E488: Karakterleri takip ediyor'. – ExcellentAverage

+0

Evet gerçekten. Haklısın! Sabit! –

3

Bu mükemmel olmayabilir, Ne kullandığımı paylaşıyorum.

Bu, :set hl öğesinin önceden ayarlandığını varsayar. *'a basmak, imleç altındaki kelimeyi arar. İmleci kelimenize getirin. Ama genellikle * yerine gd kullanıyorum.

Ardından, kelimeyi değiştirmek için ciw'u kullanarak değiştirin. Sonra Esc. Şimdi bir sonraki olaya n'dan gidebiliriz.

Aynı kelimeye değiştirilmesi gerekiyorsa, . tuşlarına basmak bunu yapar. Değilse, ciw'u tekrar kullanarak yeni değere değiştirebilirsiniz.

Bir sonraki olayı değiştirmeyi düşünmüyorsanız, bir sonraki olaya kadar geçen n tuşlarına basarak atlayın.

Bu küçük bir kılavuz gibi görünüyor, ancak bu düzenleme üzerinde muhafazakar bir denetim sağlıyor.

%s/value_one/\=input('replace <'.submatch(0).'> with: ')/gc 

:h :s\= ve :h input():

+0

Yanıt için teşekkürler. Luc Hermitte'ın cevabını tercih ediyorum çünkü bence daha zariftir. Çaba için teşekkürler – ExcellentAverage

+0

Kesinlikle, sorun değil. Ben de – dlmeetei

+1

Ayrıca 'gn' hareketini de kullanabilirsiniz. örneğin tekrar etmek için 'cgn' sonra' .' (No 'n'!). Daha fazla yardım için ': h gn' ve bu Vimcast'ler bölümüne bakın: [gn ile arama eşleşmeleri üzerinde çalışma] (http://vimcasts.org/episodes/operating-on-search-matches-using-gn/) –

İlgili konular