Hatena::ブログ(Diary)

いろいろ解析日記 このページをアンテナに追加 RSSフィード

2009-09-15

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

viは複数行を削除するのが面倒」という話をときどき耳にします。複数行を削除するために、「ひたすらdを『連打』」したり、「消したい行数を『目測』して、:行数dを入力」する人も多いみたいです。以前は僕自身もひたすらdを連打していました。

でも、viには複数行を簡単・確実に削除する方法があります。また、同じ方法で複数行のコピペや置換も簡単にできます。知っているととても便利ですので、viを使う方はぜひ覚えてみてください。

目次

複数行の削除

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

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

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

f:id:nattou_curry_2:20090915215445g:image

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

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

f:id:nattou_curry_2:20090915215118g:image

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

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

f:id:nattou_curry_2:20090915215119g:image

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

f:id:nattou_curry_2:20090915215120g:image

削除できました!

f:id:nattou_curry_2:20090915215116g:image


複数行のコピペ

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

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

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

f:id:nattou_curry_2:20090915220851g:image

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

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

f:id:nattou_curry_2:20090915220848g:image

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

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

f:id:nattou_curry_2:20090915220841g:image

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

f:id:nattou_curry_2:20090915220835g:image

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

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

f:id:nattou_curry_2:20090915220833g:image

コピペできました!

f:id:nattou_curry_2:20090915220828g:image


複数行の置換

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

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

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

f:id:nattou_curry_2:20090915222515g:image

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

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

f:id:nattou_curry_2:20090915222507g:image

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

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

f:id:nattou_curry_2:20090915222503g:image

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

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

f:id:nattou_curry_2:20090915222454g:image

置換できました!

f:id:nattou_curry_2:20090915222448g:image


「ms」と「me」とは?

開始行や終了行で入力している「ms」と「me」は、行にマークを付けるための「mコマンド」です。「ms」と入力すると現在のカーソル行にマーク「s」が付き、「me」と入力すると現在のカーソル行にマーク「e」が付きます。

mコマンドでマークを付けた行は、「's」や「'e」を使用して参照できます。たとえば、「:'s,'ed」は、マーク「s」が付いた行からマーク「e」が付いた行の範囲を削除するという意味になります。

ちなみに、マークには「s」や「e」以外の文字も使用できます。しかし、僕の場合、開始行(start)を「s」とし、終了行(end)を「e」と決めてしまい、他の文字は一切使っていません。行範囲の指定でしかはマークを使っていないので、「s」と「e」だけで十分だからです。

よちゃんよちゃん 2010/09/06 16:43 linux server の構築で、httpd.conf の追記で、複数行をコピーできないかとあれこれやっていたら、
こちらの記事がドンぴしゃで参考になりました。ありがとうございます。

アキレスアキレス 2014/12/04 19:33 大変便利な方法です。ありがとうございました!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元