Vim'de bazen bir maçın ilk birkaç tekrarını bir çizgi üzerinde değiştirebilirim, ancak her biri böyle golmaz. Örneğin:
a a a a a
için
b b b a a
Kullanabileceğimi biliyorum :s/a/b/[enter]:[up][enter]:[up][enter], ama bu üç tekrarda yeterince sıkıcı, potansiyel olarak 10'dan fazla oyuncu değişikliği olan çizgilerim var.
Denedim:
:s/a/b/3g: vim sondaki karakterlerden şikayet etti.:s/a/b/3: bu ve sonraki iki satırdaki ilk olayı değiştirir.3:s/a/b: öncekiyle aynı.:s/a/b/g3: bu ve sonraki iki satırdaki tüm tekrarlamaları değiştirir.:3s/a/b: 3. satırdaki ilk olayı değiştirir.:/a/,3/a/s/a/b: dosyada bulunan sonrakiave üçüncü satır arasındaki her satırdaki ilk tekrarlamayı değiştirira(gerekirse tersine çevirmeyi ister).:/a/,/\([^a]*a\)\{3\}/s/a/b/: bu ile sonraki arasındaki her satırdaki ilk oluşumu 3as ile değiştirir (ve bu çok karakterli bir aramaya kolayca genişletilemezdi).
Ve hiçbiri işe yaramayan diğer adresleme kalıpları. Söylemeliyim ki, :sbu soruna bir cevap bulmaya çalışan komuta hakkında adil bir miktar öğrendim , ama hala çözemedim.
Bunu nasıl yapacağını bilen var mı?
(belirli aralık için bonus puanlar, örneğin ikinci ila dördüncü tekrarlar)
nve .burada kullanmayı düşünmemiştim. Kesinlikle bir gelişme, teşekkürler.
s/a/=something/hile yapmalı ( :help sub-replace-=). Vim'de hemen somethingyarasa yazacak kadar akıcı değilim .
:[up][enter]ile değiştirilebilir &hala ideal değildir ama en azından daha az ağrılı olan.