Eşleşen bir satırdan önce ve sonra bir dizi n satırını silme?


12

Yinelenen bir yapılandırma dosyası var ve bir regex ile eşleştirmek ve bir maçtan önce ve sonra bir dizi satırı silmek istiyorum. Ayrıca tek komutta eşleşmeyi silmek istiyorum.

Kullanabilirim...

:g/match/-1d

... bir maçtan önce birden fazla satırı silmek için birkaç kez ...

... ve birkaç çağrı ile birleştirin ...

:g/match/+1d

... maçtan sonra birden fazla satırı silmek için ...

Ancak, bir komutla eşleşme öncesinde, sonrasında ve dahil olmak üzere bir dizi satırı silmenin bir yolu var mı?

Yanıtlar:


21

Neredeyse bitti; aynı zamanda (şimdi kullandığınız gibi) [line1],[line2][command]yerine, bir dizi çizgi belirtebilirsiniz [line][command].

.Geçerli satıra başvurmak için kullanabilirsiniz .

  • Geçerli ve sonraki satır için: :g/match/.,+1d
  • Geçerli ve önceki satır için: :g/match/-1,.d
  • Önceki, geçerli ve sonraki satır için: :g/match/-1,+1d

Daha :help [range]fazla bilgi için bakın ve bu cevapta birkaç örnek daha var .


Sed'de sözdizimi aynı mıdır?
leeand00

3
@ leeand00 Hayır. Tek yapmanız gereken :g, bir kalıpla eşleşen satırlarda ex komutu çalıştırmaktır. Yani yazmak :g/match/.,+1d, tüm satırlara gitmek matchve :.,+1d
yazmakla

Bir süredir vim'de öğrendiğim en havalı şey bu. Paylaşım için teşekkürler!
lps
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.