第 10 章:マークとジャンプ
コードを書いていると、ファイル上部を編集している途中で、末尾にある関数定義を 確認したくなることがあります。確認後に「さっきどこにいた?」となったり、複数の ファイルを行き来するうちに位置を見失ったりしがちです。
Vim には「位置を記憶し、素早く戻る」ための仕組み、マークとジャンプリストがあり、 大きなファイル内でも複数ファイル間でも自在に移動できます。
マーク
マークは位置に名前を付け、いつでもそこへ戻れるようにします。
m<X>現在位置に X というマークを設定(X は a–z または A–Z)`<X>マーク X の正確な位置(行と列)へジャンプ'<X>マーク X を含む行の先頭へジャンプ:marksすべてのマークを表示
小文字のマーク(a–z)は現在のファイル内だけで有効です。大文字のマーク (A–Z)はグローバルで、ファイルをまたいでジャンプできます。
注意:`(バッククォート)は正確な行と列へ移動しますが、' (シングルクォート)は行頭へ移動します。混同しないでください。大文字の グローバルマークは、よく訪れる場所を記録するのに便利です。たとえば設定ファイルの 入口を C として記録できます。
現在位置で
maを押してマークを設定し、Gでファイル末尾へ移動してから、`aを押してください。元の正確な位置へ戻るか確認します。
自動マーク
Vim は、明示的に設定しなくてもいくつかの特殊なマークを自動管理します。
`.最後に変更した位置へジャンプ`"最後にファイルを離れた位置へジャンプ(再度開くときに便利)` `最後のジャンプ前の位置へジャンプ(バッククォート二つ)`[/`]最後にヤンクまたは貼り付けたテキストの先頭 / 末尾
ヒント:`. はとても便利です。どこまでスクロールしても最後に編集した場所へ 戻り、そのまま作業を続けられます。
ジャンプリスト
G、gg、/search、n、`<X>、gf のような「大きなジャンプ」は Vim の ジャンプリストへ記録され、その履歴を前後に移動できます。
Ctrl-o一つ前の位置(older)へ戻るCtrl-iまたはTab一つ先の位置(newer)へ進む:jumpsジャンプリストを表示
注意:j や k のような連続した小さな移動は記録されず、「飛ぶ」移動だけが 記録されます。ジャンプリストが残すべきなのは訪れた重要な場所であり、細かな一歩 すべてではないからです。
このファイルで
/マークを実行して上へ移動し、Gで末尾へ移動します。Ctrl-oを数回押して足跡を戻り、続けてCtrl-iで再び進んでください。
変更リスト
ジャンプリストが「訪れた場所」を記録するのに対し、変更リストは「変更した場所」を 記録します。
g;前の変更位置へジャンプg,次の変更位置へジャンプ:changes変更リストを表示
大きなファイルの複数箇所を編集した後、g; で変更箇所を一つずつたどれます。 スクロールして探すよりずっと速い方法です。
このファイルの離れた場所を何箇所か編集し(後で
uで元に戻してください)、g;を押して変更履歴をたどってください。
マークとジャンプを使えば、コード内に「足跡」を残せます。次は視野を単一ファイル からプロジェクト全体へ広げます。
次の章では複数ファイルの検索と置換を紹介します。