kullanabilirim
:5,12s/foo/bar/g
5. ve 12. satırlar arasında aramak foove değiştirmek için bunu barnasıl sadece 5. ve 12. satırlarda yapabilirim (aradaki satırlarda değil)?
Yanıtlar:
Vim'in belirli satırlarda, sütunlarda vb. Eşleşen özel düzenli ifade atomları vardır; eşleşmeleri sınırlamak için bunları (muhtemelen aralığa ek olarak) kullanabilirsiniz:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
Görmek :help /\%l
Değişikliği 5. satırda yapabilir ve 12. satırda minimum çabayla tekrarlayabilirsiniz:
:5s/foo/bar
:12&
Ingo'nun işaret ettiği gibi :&, bayraklarınızı unutur. Kullandığınız /giçin doğru komut şu olacaktır :&&:
:5s/foo/bar/g
:12&&
Gör :help :&ve arkadaşlar.
:&kullanmak için +1 . Bayraklar ( s/../../g) varsa, birinin kullanılması gerekir :&&...
\(\%5l\|\%12l\)daha belirsiz:&
cSonuna her zaman bir ekleyebilirsiniz . Bu, her maç için onay isteyecektir.
:5,12s/foo/bar/gc
goyunda bir bayrak olduğunu unutmayın )
n5 veya 6 kez basmak \(\%5l\|\%12l\), yedek ifadeye eklemekten daha zahmetli mi?
İlginç soru. Görünüşe göre yalnızca aralık seçimi var ve birden çok satır seçimi yok:
http://vim.wikia.com/wiki/Ranges
Ancak, 5. ve 12. satırlarda özel bir şeyiniz varsa, :goperatörü kullanabilirsiniz . Dosyanız böyle görünüyorsa (yalnızca referans için sayılar):
1 line one
2 line one
3 line one
4 line one
5 enil one
6 line one
7 line one
8 line one
9 line one
10 line one
11 line one
12 enil one
Ve Değiştirmek istediğiniz onetarafından enovar hatlarda enilyerine line:
:g/enil/s/one/eno/
Kullanabilirsiniz ed- vi ve vim'e benzer komutlara sahip satır yönelimli bir metin düzenleyici. Muhtemelen vi ve vim'den öncedir.
Bir komut dosyasında (EndCommand işaretçisine kadar girdiyi işleyen burada bir belge kullanarak) şöyle görünür:
ed file <<EndCommands
5
s/foo/bar/g
7
s/foo/bar/g
wq
EndCommands
Açıkçası, ed komutları komut satırında da kullanılabilir.
vimAlternatife göre bir avantaj görmüyorum .
:s, ancak yine de :skomutun kopyası vardır (romainl'in çözümü bundan kaçınır).
sedolsa da ...