やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Vimでビジュアルモード時、行をまたぎインデントもしたテキストを部分削除すると空白文字を一発できれいに消せない

当たり前かもしれないが。面倒。

問題

before

def A():
    if True:
        print('A')
        print('B')
        print('C')

after

def A():
    print('B')
    print('C')

beforeをafterにしたいのだが、以下のように操作すると残念な結果になる。

  1. vでビジュアルモードにする
  2. if .. print('A')\nまでを選択する
    1. j
    2. $ (Shift + 4)
  3. 以下のようにインデントが崩れてしまう
def A():
            print('B')
        print('C')

\nを含めず削除すれば、と思ったが余計な空白が残る。

def A():
    
        print('B')
        print('C')

だからといって、ddで削除するのも。削除する行数分*2回もdキー押下せねばならないし、インデントがそのまま。10行分削除やインデントするとき、どうすんの?

def A():
        print('B')
        print('C')

どうするのが最短? どうすれば覚えるのを最小化できる? 総合的に楽なのは?

解決

ビジュアル行モードを使う。

3種類のビジュアルモード

コマンド モード名 説明
v ビジュアル 指定インデックスの文字を選択する
Shift + v ビジュアル行 指定行を選択する
Ctrl + v ビジュアル矩形 指定列を選択する

じつは3種類もあった。これらを理解し、使い分ける必要がある...。

手順

  1. if ..の行でノーマルモード時、Shift + vキー押下する
  2. ビジュアル行モードになる
  3. jキー押下でprint('A')選択
  4. Delキー押下で削除する
  5. Shift + v
  6. j
  7. <でインデントを下げる

なお、.で直前のコマンドを実行できる。インデントを複数下げたければ.

一体どこが省略できているのかって? $で列移動しなくて済んだじゃないか。たったそれだけ? ...。

とても最短には見えないが...。ほかに方法はあるのか?

VimScriptなどに手を染めたら、さらなる学習コスト増大とバグ祭りの憂き目に合いそうで嫌。

GUIエディタのほうが圧倒的に早いのですが

GUIエディタならShift + カーソルキーで選択できるので早い。削除もインデントも同様。