viを使うなら覚えておきたい複数行の削除・コピペ・置換
「viは複数行を削除するのが面倒」という話をときどき耳にします。複数行を削除するために、「ひたすらdを『連打』」したり、「消したい行数を『目測』して、:行数dを入力」する人も多いみたいです。以前は僕自身もひたすらdを連打していました。
でも、viには複数行を簡単・確実に削除する方法があります。また、同じ方法で複数行のコピペや置換も簡単にできます。知っているととても便利ですので、viを使う方はぜひ覚えてみてください。
複数行のコピペ
複数行のコピペの手順は以下の4ステップです。
- コピー範囲の開始行で「ms」と入力します。
- コピー範囲の終了行で「me」と入力します。
- 「:'s,'ey」と入力し、エンターを押します。
- ペーストしたい行で「p」と入力します。
複数行の置換
複数行の置換の手順は以下の3ステップです。
- 置換範囲の開始行で「ms」と入力します。
- 置換範囲の終了行で「me」と入力します。
- 「:'s,'es/置換前/置換後/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」だけで十分だからです。