Skip to content

第 10 章:マークとジャンプ

コードを書いていると、ファイル上部を編集している途中で、末尾にある関数定義を 確認したくなることがあります。確認後に「さっきどこにいた?」となったり、複数の ファイルを行き来するうちに位置を見失ったりしがちです。

Vim には「位置を記憶し、素早く戻る」ための仕組み、マークとジャンプリストがあり、 大きなファイル内でも複数ファイル間でも自在に移動できます。

マーク

マークは位置に名前を付け、いつでもそこへ戻れるようにします。

  • m<X> 現在位置に X というマークを設定(X は a–z または A–Z)
  • `<X> マーク X の正確な位置(行と列)へジャンプ
  • '<X> マーク X を含む行の先頭へジャンプ
  • :marks すべてのマークを表示

小文字のマーク(a–z)は現在のファイル内だけで有効です。大文字のマーク (A–Z)はグローバルで、ファイルをまたいでジャンプできます。

注意:`(バッククォート)は正確な行と列へ移動しますが、' (シングルクォート)は行頭へ移動します。混同しないでください。大文字の グローバルマークは、よく訪れる場所を記録するのに便利です。たとえば設定ファイルの 入口を C として記録できます。

現在位置で ma を押してマークを設定し、G でファイル末尾へ移動してから、 `a を押してください。元の正確な位置へ戻るか確認します。

自動マーク

Vim は、明示的に設定しなくてもいくつかの特殊なマークを自動管理します。

  • `. 最後に変更した位置へジャンプ
  • `" 最後にファイルを離れた位置へジャンプ(再度開くときに便利)
  • ` ` 最後のジャンプ前の位置へジャンプ(バッククォート二つ)
  • `[ / `] 最後にヤンクまたは貼り付けたテキストの先頭 / 末尾

ヒント:`. はとても便利です。どこまでスクロールしても最後に編集した場所へ 戻り、そのまま作業を続けられます。

ジャンプリスト

Ggg/searchn`<X>gf のような「大きなジャンプ」は Vim の ジャンプリストへ記録され、その履歴を前後に移動できます。

  • Ctrl-o 一つ前の位置(older)へ戻る
  • Ctrl-i または Tab 一つ先の位置(newer)へ進む
  • :jumps ジャンプリストを表示

注意:jk のような連続した小さな移動は記録されず、「飛ぶ」移動だけが 記録されます。ジャンプリストが残すべきなのは訪れた重要な場所であり、細かな一歩 すべてではないからです。

このファイルで /マーク を実行して上へ移動し、G で末尾へ移動します。 Ctrl-o を数回押して足跡を戻り、続けて Ctrl-i で再び進んでください。

変更リスト

ジャンプリストが「訪れた場所」を記録するのに対し、変更リストは「変更した場所」を 記録します。

  • g; 前の変更位置へジャンプ
  • g, 次の変更位置へジャンプ
  • :changes 変更リストを表示

大きなファイルの複数箇所を編集した後、g; で変更箇所を一つずつたどれます。 スクロールして探すよりずっと速い方法です。

このファイルの離れた場所を何箇所か編集し(後で u で元に戻してください)、 g; を押して変更履歴をたどってください。

マークとジャンプを使えば、コード内に「足跡」を残せます。次は視野を単一ファイル からプロジェクト全体へ広げます。

次の章では複数ファイルの検索と置換を紹介します。