viを使うなら覚えておきたい複数行の削除・コピペ・置換

「viは複数行を削除するのが面倒」という話をときどき耳にします。複数行を削除するために、「ひたすらdを『連打』」したり、「消したい行数を『目測』して、:行数dを入力」する人も多いみたいです。以前は僕自身もひたすらdを連打していました。
でも、viには複数行を簡単・確実に削除する方法があります。また、同じ方法で複数行のコピペや置換も簡単にできます。知っているととても便利ですので、viを使う方はぜひ覚えてみてください。

複数行の削除

複数行の削除の手順は以下の3ステップです。

  1. 削除範囲の開始行で「ms」と入力します。
  2. 削除範囲の終了行で「me」と入力します。
  3. 「:'s,'ed」と入力し、エンターを押します。


例として、下図中の赤枠内の行を削除します。

(1) 削除範囲の開始行で「ms」と入力します。

viのカーソルを削除範囲の開始行に置き、「ms」と入力します。

(2) 削除範囲の終了行で「me」と入力します。

viのカーソルを削除範囲の終了行に置き、「me」と入力します。

(3)「:'s,'ed」と入力し、エンターを押します。

削除できました!

複数行のコピペ

複数行のコピペの手順は以下の4ステップです。

  1. コピー範囲の開始行で「ms」と入力します。
  2. コピー範囲の終了行で「me」と入力します。
  3. 「:'s,'ey」と入力し、エンターを押します。
  4. ペーストしたい行で「p」と入力します。


例として、下図中の赤枠内の行をコピペします。

(1) コピー範囲の開始行で「ms」と入力します。

viのカーソルをコピー範囲の開始行に置き、「ms」と入力します。

(2) コピー範囲の終了行で「me」と入力します。

viのカーソルをコピー範囲の終了行に置き、「me」と入力します。

(3)「:'s,'ey」と入力し、エンターを押します。

(4) ペーストしたい行で「p」と入力します。

viのカーソルをペーストしたい行に置き、「p」と入力します。

コピペできました!

複数行の置換

複数行の置換の手順は以下の3ステップです。

  1. 置換範囲の開始行で「ms」と入力します。
  2. 置換範囲の終了行で「me」と入力します。
  3. 「:'s,'es/置換前/置換後/g」と入力し、エンターを押します。


例として、下図中の赤枠内の行にある「product」を「sale」に置換します。

(1) 置換範囲の開始行で「ms」と入力します。

viのカーソルを置換範囲の開始行に置き、「ms」と入力します。

(2) 置換範囲の終了行で「me」と入力します。

viのカーソルを置換範囲の終了行に置き、「me」と入力します。

(3)「:'s,'es/置換前/置換後/g」と入力し、エンターを押します。

「product」を「sale」に置換するので、「:'s,'es/product/sale/g」と入力し、エンターを押します。

置換できました!

「ms」と「me」とは?

開始行や終了行で入力している「ms」と「me」は、行にマークを付けるための「mコマンド」です。「ms」と入力すると現在のカーソル行にマーク「s」が付き、「me」と入力すると現在のカーソル行にマーク「e」が付きます。
mコマンドでマークを付けた行は、「's」や「'e」を使用して参照できます。たとえば、「:'s,'ed」は、マーク「s」が付いた行からマーク「e」が付いた行の範囲を削除するという意味になります。
ちなみに、マークには「s」や「e」以外の文字も使用できます。しかし、僕の場合、開始行(start)を「s」とし、終了行(end)を「e」と決めてしまい、他の文字は一切使っていません。行範囲の指定でしかはマークを使っていないので、「s」と「e」だけで十分だからです。