さっきいた場所に戻る
G や検索でファイルの別の場所を見に行ったあと、元いた行に戻るのに苦労した経験はないでしょうか。Vimはジャンプした場所を覚えていて、Ctrl-o で順に引き返せます。
何が「ジャンプ」に数えられるか
記録されるのは G gg / ? n N % H M L ' ` のように「遠くへ飛ぶ」コマンドだけです。j や w のような1歩ずつの移動は記録されないので、履歴が細切れになりません。
本物のVimでは :jumps で履歴の一覧を確認できます。ファイルをまたいでも記録されるので、別のファイルへ定義を見に行ってから Ctrl-o で元のファイルの元の行に戻る、という使い方ができます。
似ているが別物の記録
Ctrl-o が「移動の履歴」なのに対し、g; は「変更した場所の履歴」をさかのぼります。また ``(バッククォート2つ)は、直前にジャンプした位置との間を行き来します。見に行って戻るだけなら `` のほうが速いこともあります。
Ctrl-i と Tab は同じキー
ターミナルでは Ctrl-i と Tab がまったく同じ信号として送られます。そのため Tab を押しても前へ進めますし、逆に Ctrl-i に別の機能を割り当てると Tab の動きも一緒に変わってしまいます。
GUI版のVimやNeovimの一部の環境では、この2つを区別できることがあります。設定を書き換えるときは、自分の環境でどちらの扱いになっているかを確かめてください。
ジャンプの履歴はウィンドウごとに持つ
ジャンプリストはファイル単位ではなくウィンドウ単位で記録されます。ウィンドウを分割すると、分割した時点の履歴が引き継がれ、そのあとは別々に伸びていきます。
別のファイルへ飛んだあとでも Ctrl-o で元のファイルに戻れるのはこのためです。定義を見に行って戻る、という動きが1つのキーで完結します。
編集した場所をたどる
Ctrl-o が移動の履歴をたどるのに対して、g; は編集した場所の履歴を古いほうへたどります。逆向きは g, です。一覧は :changes で見られます。
「さっき直したところをもう一度見たい」ときは、移動の履歴より編集の履歴のほうが当たります。移動をたくさん挟んだあとでも、編集した場所だけを拾ってくれるためです。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| Ctrl-o | さっきいた場所へ戻る |
| Ctrl-i | 戻る前の場所へ進む |