Vim で最後に選択した範囲を再選択するのに gv コマンドが便利


Vim の Visual モードで最後に選択した範囲をもう一度選択したいという時に便利な gv コマンドを紹介します.

gv の基本的な使い方として, 例えば次のような Ruby のコードで:

Foo 1

j^v$g_puts 'foo' の部分のみ Visual モードで選択し:

Foo 2

y でヤンク (コピー) してから:

Foo 3

gv で直前に Visual モードで選択した範囲を再選択できます:

Foo 4

Visual モードであれば, 普通の Visual モードに加えて, Visual Line, Visual Block でも同じように gv を使うことができます.

gv のより具体的な 3 つの例

Ruby コードで gv を使ったより具体的な 3 つの例を紹介します.

Visual モードで > したコードを再選択する

次の Ruby コードで foo メソッドを右に一つインデントしてから, Foo クラスの中に移動させたいという場合に gv を使うと便利です:

Example 1 1

まず 2jVG で Visual Line で foo メソッドの行選択をします:

Example 1 2

そして > で右に一つインデントさせます:

Example 1 3

ここで gv を使って直前の foo メソッドの行選択を再度行います:

Example 1 4

d で切り取り:

Example 1 5

PFoo クラスの中に貼り付けます:

Example 1 6

このように gv を使うと少しだけ便利になりますよね.

別に gvd でなくても dG で同じように切り取れますよねというご指摘がありましたら , 全くその通りなのですが, dG の場合だとどこまで切り取るかということを視認しなくてはいけませんが, gvd だったら別に視認する必要なく, 前の Visual モードの選択範囲が切り取られるとわかるので, ほんの少しだけ頭の CPU の負荷を抑えることができるかと思います.

Visual モードで p or P したコードを再選択する

次の Ruby コードで foo メソッドを切り取って, Foo クラス内の bar メソッドを Visual モードで選択し, それを p で置換し, gv で置換に使用した foo メソッドを再選択し > で右に一つインデントさせます:

Example 2 1

なのでまず 6jdGfoo メソッドを切り取り:

Example 2 2

kV3kbar メソッドを Visual モードで選択し:

Example 2 3

p で選択中の bar メソッドを, 先ほど切り取った foo メソッドで置換します:

Example 2 4

そしてここで gv で, その置き換えた foo メソッドを再選択し:

Example 2 5

> で右に一つインデントさせます:

Example 2 6

このように gv は Visual モードで使われた p もしくは P によって置換する際に使用したテキストを再選択することもできます.

Visual モードで現在選択している範囲を前に選択した範囲に切り替える

Visual モードで現在選択中の範囲を gv で前に選択した範囲に切り替えることもできます.

今までの二つの例が Normal モードでの gv だったのに対して, 今度のは Visual モードでの gv になります.

次の Ruby コードで:

Example 3 1

6jVGfoo メソッドを Visual Line で選択してから:

Example 3 2

y でヤンクし:

Example 3 3

2kV3kbar メソッドを Visual Line で選択し:

Example 3 4

p で置換しようと思いますが, やっぱり foo メソッドを切り取りたいと気が変わります.

そこで gv すると foo メソッドに選択範囲が移ります:

Example 3 5

そして dfoo を切り取り:

Example 3 6

kV3kbar を再度選択してから, p で, 今切り取った foo で置換します:

Example 3 7

gv でたった今 p で貼り付けた foo を再度選択し, > で右に一つインデントさせます:

Example 3 8

このように Visual モードで現在選択中の範囲を, やっぱりさっき選択した範囲を選択し直したいと気が変わった時でも gv を使うことができます.

まとめ

Vim は結構マニアックなテキストエディタなので, 扱う内容も自ずとマニアックになってしまうのですが, 今回はマニアックなテキストエディタのマニアックな gv コマンドを紹介させていただきました.

マニアックの二乗といった感じで, それなりにマニアックな内容になってしまった感じもするのですが, 僕は Vim が好きなのでこんな感じの内容をちょくちょく紹介させていただければと思っております.

もしかしたらこのような内容でもある程度参考にしていただける方がおられるかもしれませんので.