vimエディタで特定の行を削除する方法

vimエディタで特定の行を削除する方法

vim エディタに 50 行あり、特定の行 (5、9、16、28) を 1 つのコマンドで削除する必要があるとします。

答え1

一度に別々の行を操作するのは扱いにくいですが、次のように実行できます。

:g/\v%5l|%9l|%16l|%28l/d
  • :g/.../- パターンに一致する行に対して操作します/.../
  • \v-とても魔法の正規表現内の特殊文字のエスケープが少なくなります。
  • %<num>l- 行番号に一致します<num>(つまり、%5l|%9l|...5 行目または 9 行目などに一致します)。
  • :d行を削除します。

:<num>d1 行だけの場合、または行の範囲の場合は、または:<start>,<end>d(たとえば、:5d5 行目の場合、または:9,16d9 行目から 16 行目まで(両端を含む)の行の範囲の場合)を実行できます。

答え2

:5d|9d|16d|28d

4 つの単一コマンドを連続して配置する方法です。ただし、次のように逆の方が良いでしょう。

:28d|16d|9d|5d

番号を一定に保つため。


より柔軟な方法は、vimscript を使用することです。これを 1 行にまとめると次のようになります。

:for n in [28,16,9,5] | call deletebufline("%",n,n) | endfor

関連情報