Vimでファイルを編集していて、こんな場面に遭遇したことはありませんか?
- 「長いファイルの一番下にすぐ移動したい」
- 「ページダウンキーを何度も押すのが面倒…」
- 「マウスのスクロールが使えない環境で困っている」
そんなときに威力を発揮するのが、Vimの移動コマンドです。
たった1文字のコマンドで、一瞬で最終行にジャンプできるんです。
この記事では、Vimでの効率的な移動方法を、基本から応用まで詳しく解説します。
Vimの移動コマンドの基本概念

なぜVimは移動コマンドが重要?
キーボード中心の設計
- マウスを使わずにすべての操作が可能
- 手をホームポジションから離さない効率性
- 一度覚えれば非常に高速な操作が可能
モード概念との関係
- 移動コマンドは主にノーマルモードで使用
- 編集中(インサートモード)からはEscでノーマルモードに戻る
- 移動と編集を明確に分離した設計
基本的なモード切り替え
現在のモードを確認
- インサートモード: 画面下部に「– INSERT –」表示
- ノーマルモード: 特に表示なし(デフォルト状態)
ノーマルモードに戻る
Esc
何度押しても安全なので、迷ったらEscを押しましょう。
最終行移動の基本コマンド

最も基本的な方法
最終行へ一発移動
G
- Shift + g(大文字のG)
- ファイルの最終行の行頭にカーソルが移動
- どこからでも一瞬で移動可能
実行例
# 例:100行のファイルで10行目にいるとき
G # → 100行目(最終行)に瞬間移動
行番号指定移動
先頭行への移動
1G
または
gg
どちらもファイルの先頭(1行目)に移動
任意の行への移動
nG # n行目に移動
具体例
10G # 10行目に移動
50G # 50行目に移動
999G # 999行目に移動(存在しない場合は最終行)
行数を確認しながら移動
:set number # 行番号表示を有効化
より高度な移動コマンド

相対的な移動
現在位置からの相対移動
+n # n行下に移動
-n # n行上に移動
実例
+5 # 5行下に移動
-10 # 10行上に移動
画面単位での移動
Ctrl+f # 1画面分下にスクロール(forward)
Ctrl+b # 1画面分上にスクロール(backward)
Ctrl+d # 半画面分下にスクロール(down)
Ctrl+u # 半画面分上にスクロール(up)
行内での移動
行の端への移動
0 # 行の先頭(1文字目)に移動
^ # 行の最初の非空白文字に移動
$ # 行の末尾に移動
単語単位での移動
w # 次の単語の先頭に移動
b # 前の単語の先頭に移動
e # 現在の単語の末尾に移動
移動履歴と戻る機能
移動履歴の活用
前の位置に戻る
`` # バッククォート2回
または
'' # シングルクォート2回
動作の違い
''
: 前の位置の行頭に戻る
実用例
# 現在10行目にいる
G # 最終行(100行目)に移動
`` # 10行目の元の位置に戻る
ジャンプリストの活用
ジャンプリストとは Vimが自動的に記録する移動履歴のことです。
ジャンプリストの確認
:jumps
ジャンプリストでの移動
Ctrl+o # 古い位置に戻る(older)
Ctrl+i # 新しい位置に進む(Tab)
ジャンプリストに記録される移動
- G、gg などの行移動
- 検索による移動(/、?)
- マークへの移動
- ファイル間の移動
マーク機能の活用

基本的なマーク操作
マークの設定
ma # 現在位置を'a'という名前でマーク
mb # 現在位置を'b'という名前でマーク
マークへの移動
`a # マーク'a'の正確な位置に移動
'a # マーク'a'の行頭に移動
マークの種類
ローカルマーク(a-z)
- 現在のファイル内でのみ有効
- ファイルを閉じると消失
グローバルマーク(A-Z)
- ファイルを超えて有効
- Vimを終了しても保持される
特別なマーク
'. # 最後に編集した位置
'" # ファイルを開いたときのカーソル位置
'[ # 最後にヤンク・変更した範囲の開始
'] # 最後にヤンク・変更した範囲の終了
検索と組み合わせた移動
検索による移動
基本的な検索
/pattern # 下方向検索
?pattern # 上方向検索
検索結果間の移動
n # 次の検索結果
N # 前の検索結果
最終行からの検索活用例
G # 最終行に移動
?TODO # 上方向にTODOを検索
n # 次のTODOを検索
実用的な検索パターン
特定の文字列に素早く移動
# 最終行に移動してから上方向検索
G
?function # 最後の関数定義を検索
?class # 最後のクラス定義を検索
?# # 最後のコメント行を検索
行の特徴で検索
/^$ # 空行を検索
/^\s*$ # 空白のみの行を検索
/^# # #で始まる行を検索
実用的な移動テクニック

ファイル全体の把握
ファイル情報の確認
Ctrl+g # 現在位置とファイル情報を表示
g Ctrl+g # 詳細な統計情報を表示
表示される情報例
"filename.txt" line 45 of 100 --45%-- col 12-20
効率的な編集フロー
典型的な編集パターン
# パターン1: 最終行に追記
G # 最終行に移動
o # 新しい行を作成してインサートモード
# (内容を入力)
Esc # ノーマルモードに戻る
# パターン2: 先頭に挿入
gg # 先頭行に移動
O # 上に新しい行を作成
# (内容を入力)
Esc # ノーマルモードに戻る
大きなファイルでの移動戦略
段階的な移動
# 1. まず全体を把握
gg # 先頭へ
G # 最終行へ
`` # 元の位置に戻る
# 2. 大まかな位置を特定
50% # ファイルの50%の位置に移動
75% # ファイルの75%の位置に移動
# 3. 詳細な位置を特定
/search_term # 検索で絞り込み
トラブルシューティング
よくある問題と解決法
問題1: Gコマンドが効かない
原因と対策:
# 原因: インサートモードにいる
# 対策: Escでノーマルモードに戻る
Esc
G
問題2: 移動後に元の位置がわからない
対策:
# 移動前にマークを設定
ma # 現在位置をマーク
G # 移動
'a # マークした位置に戻る
問題3: 行番号がわからない
対策:
:set number # 行番号表示
:set relativenumber # 相対行番号表示
パフォーマンス最適化
大きなファイルでの注意点
- 非常に大きなファイル(数万行以上)では移動に時間がかかる場合
- 可能であれば検索で絞り込んでから移動
- 不要なプラグインは無効化
設定の最適化
" .vimrcでの推奨設定
set scrolloff=5 " カーソル周辺の表示行数
set sidescrolloff=5 " 横スクロールの余白
set lazyredraw " マクロ実行中の画面更新を抑制
実践的な練習方法
基本練習
Step 1: 基本移動をマスター
gg # 先頭
G # 最終行
`` # 戻る
Step 2: 行番号移動をマスター
10G # 10行目
50G # 50行目
1G # 先頭(ggと同じ)
Step 3: マークと組み合わせ
ma # マーク設定
G # 最終行移動
'a # マークした位置に戻る
応用練習
実際のファイルでの練習
- 長めのファイル(100行以上)を用意
- 以下の操作を繰り返し練習
# 練習シーケンス1
gg → G → `` → ma → 50G → 'a
# 練習シーケンス2
G → ?function → n → N → ``
# 練習シーケンス3
gg → /TODO → n → G → ``
移動コマンド一覧表

基本移動
コマンド | 動作 | 使用場面 |
---|---|---|
G | 最終行に移動 | ファイルの末尾を確認 |
gg | 先頭行に移動 | ファイルの先頭に戻る |
nG | n行目に移動 | 行番号がわかっている場合 |
$ | 行末に移動 | 行の最後を編集 |
0 | 行頭に移動 | 行の先頭を編集 |
履歴・マーク
コマンド | 動作 | 使用場面 |
---|---|---|
““““ | 前の位置に戻る | 一時的な移動から復帰 |
'' | 前の行に戻る | 行レベルでの復帰 |
ma | マーク設定 | 重要な位置をブックマーク |
'a | マークに移動 | ブックマークした位置に戻る |
画面移動
コマンド | 動作 | 使用場面 |
---|---|---|
Ctrl+f | 1画面下 | 大きなファイルの閲覧 |
Ctrl+b | 1画面上 | 大きなファイルの閲覧 |
Ctrl+d | 半画面下 | 適度なスクロール |
Ctrl+u | 半画面上 | 適度なスクロール |
まとめ
Vimでの最終行移動は、効率的な編集作業の基本中の基本です。
重要なポイント
最低限覚えるべきコマンド
G
– 最終行移動gg
– 先頭行移動
効率アップのコマンド
nG
– 行番号指定移動ma
,'a
– マーク機能/
,?
– 検索と組み合わせ
コメント