一致した行の前後のn行の範囲を削除しますか?


12

繰り返し使用する構成ファイルがあり、正規表現に一致させて、一致の前後の行範囲を削除したいのですが。また、1つのコマンドで一致を削除します。

使うことができます...

:g/match/-1d

...試合前から複数の行を削除するために数回...

...そしてそれをいくつかの呼び出しと組み合わせる...

:g/match/+1d

...一致後に複数の行を削除するには...

しかし、1つのコマンドで一致の前、後、含む範囲の行を削除する方法はありますか?

回答:


21

あと少しです。(現在使用しているよう[line1],[line2][command]に)だけでなく、の形式の行の範囲を指定することもできます[line][command]

.現在の行を参照するために使用できます。

  • 現在および次の行: :g/match/.,+1d
  • 現在および前の行: :g/match/-1,.d
  • 前の行、現在の行、次の行: :g/match/-1,+1d

詳細については:help [range]、を参照してください。この回答には、さらにいくつかの例があります。


構文はsedでも同じですか?
leeand00

3
@ leeand00いいえ:g。パターンに一致する行でexコマンドを実行するだけです。タイピングはとても:g/match/.,+1d正確ですべての行に行くと同じになりmatch、タイピング:.,+1d
マーティンTournoij

これは、私がしばらくvimで学んだ最もクールなことです。共有してくれてありがとう!
LPは、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.