viで範囲指定で行削除

viの行削除に関して、今まで「dd」しか知らなかった。
複数行を削除したい場合、「dd」をひたすら連打して消していた。

スマートではないやり方だとは思っていたが、
これしか知らなかったので仕方がなかった。

調べてみると、2パターンほどやり方が見つかったのでメモしておく。


マーキングで範囲指定


viには「m」コマンドというカーソル行にマーキングする機能がある。
これを使用して範囲指定して削除するやり方。

まずは削除したい範囲の開始行で下記を入力する。

 ms


何も起きないので少々不安になるが、気にせず次に移る。

次に削除したい範囲の終了行で下記を入力する。

 me


ここでも何も起きないので、ますます不安になるがグッと堪えて次に進む。

最後に下記を入力してEnterを押下する。

 :'s,'ed


これで指定した範囲が削除される。

ここで重要なことは「m」コマンドにてマーキングするということ。
「m」の次の文字は基本的には何でも良いと思われる。

ネットで出回っているやり方としては「ms」と「me」を使うものが多い。
おそらく「start」と「end」の頭文字だと思われる。

任意の文字と言われても何にしようか迷うだけなので、
「ms」と「me」を使うと覚えてしまっても問題ないと思う。

最後のコマンドは「m」でマーキングした「s」行から「e」行までを
「d」(delete)するという意味になる。

分解して考えればそこまで難しくないが、暗記するには時間が掛かりそうだ・・・。


ビジュアルモードで範囲指定


もう一つは、ビジュアルモードを使うやり方である。
行単位で選択したいので、正確に言うとビジュアルラインモードである。

まずは削除したい範囲の開始行で下記を入力する。

 V (大文字のV)


これでビジュアルラインモードに切り替わるので、下を押して範囲を指定する。
範囲指定は文字が反転されていくので視覚的にわかりやすい。

範囲指定が終わったら、下記を入力し削除する。

 x または d


どちらを入力しても結果に違いはない。
範囲指定された行が一気に削除される。


個人的にはビジュアルモードの方が簡単で良いと思うが、
ビジュアルモードが使えない場合もあるので、両方覚えて置くと吉かもしれない。



vi/Vim コマンドポケットリファレンス


人気記事