Vim'de bazen bir maçın ilk birkaç tekrarını bir çizgi üzerinde değiştirebilirim, ancak her biri böyle g
olmaz. Ö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 sonrakia
ve üçü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 3a
s 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, :s
bu 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)
n
ve .
burada kullanmayı düşünmemiştim. Kesinlikle bir gelişme, teşekkürler.
s/a/=something/
hile yapmalı ( :help sub-replace-=
). Vim'de hemen something
yarasa 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.