複数行を削除したい場合、「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 コマンドポケットリファレンス