Vimのjumpについて調べてみた

vimのhelp読んでてjumpとかあまり使ってないし理解できていないなと。

jumps

jumpのヘルプは :help jump-motions で確認できる。

jumpってそもそもなんなのかと言うとコマンドを使用してカーソルを別の行に移動させることを指すみたい。vimにはいくつもjump motionコマンドが存在しててこれらを完全に使いこなせると移動が楽になりそう。

コマンド 内容
' {a-z}のマークにジャンプする
` {a-z}のマークにジャンプする
G 指定された count 行にジャンプする。デフォルトでは最終行
/ 全文検索を行い一致する箇所にジャンプする
? 後方検索を行い一致する箇所にジャンプする
n 検索で一致した箇所に前方移動する
N 検索で一致した箇所に後方移動する
% カーソル下の文字列に対応する箇所にジャンプする。例えば括弧など
( count センテンス戻る
) count センテンス進む
{ count パラグラフ戻る
} count パラグラフ進む
:s 置換
:tag タグにジャンプ
L 画面内の最終行から count 行目に移動
M 画面内の中央行へ移動
H 画面内の最初の行から count 行目に移動

jump motionコマンドを利用する時、vimは元いた場所を全て記録してくれる。頭いいですね。記録は :ju :jumps コマンドで表示できる。上が一番古く、下が一番新しいジャンプ箇所で、 > で示されている行が今いる場所みたい。この辺りは直感的。

:ju
 jump   行   列 ファイル/テキスト
   3  1027    0 The "file/text" column shows the file name, or the text at th
   2  1040   57 The pointer will be set at the last used jump position.  The
   1  1054    0 The result is that when repeating CTRL-O you will get back to
>  0  1063   27 jump command (e.g., "G").  The jump list would then become:
   1  1072    0 The line numbers will be adjusted for deleted and inserted li
   2  1102   13 remembered.  The number of entries in the change list is fixe

CTRL-I を使うとジャンプ履歴を進み、 CTRL-O を使うとジャンプ履歴を戻る事ができる。jump 列で示されている値は今いる場所から CTRL-I CTRL-O を何回実行すればそこに辿り着けるかを示している。わかりやすい。使ってみた感じだとファイル/テキスト列の表示内容は今いるファイル以外であればファイル名だけが表示される。

change list jumps

change list jumpsはjumpとほとんど同じなんだけれどその履歴が変更箇所のみになったもの。つまり変更行を行ったり来たりできる。これは知らなかったのでとても役に立ちそう。

変更の記録は :changes で表示する事ができた。内容は :jumps と同じ。 g; で変更を遡り、 g, で変更箇所を進める事ができる。

:changes
変更   行    列  テキスト
    9     3    5 # jumps
    8    44   18 # change list jumps
    7     3    6 # jumps
    6    47  231
    5    47    0
    4    46    0 change list jumpsはjumpとほとんど同じなんだけれどそ
    3    47    6
    2    47    0

ジャンプ履歴と変更履歴(ヘルプだとリストって書いてあった)はどちらも100まで履歴を覚えておいてくれる。つまり、 999g, ってやれば最後の変更箇所にジャンプする事ができる。