行の端とファイルの端へ飛ぶ
単語単位より大きく動きたいときのキーです。行の端とファイルの端は編集中に何度も往復する場所なので、ここを1キーで飛べるかどうかで作業の速さがはっきり変わります。
0 と ^ はどちらを使うか
0 は空白を含めた1桁目、^ は空白を飛ばした最初の文字です。インデントのないファイルでは同じ場所に止まるので違いが出ませんが、コードを書いているとほとんどの行にインデントがあります。
実際の編集で行きたいのはたいてい「コードの先頭」なので、普段使うのは ^ のほうです。0 はインデントそのものを消したいときなど、桁の位置に用があるときに使います。
数字と組み合わせる
G は数字を前に付けると「その行番号へ」の意味になります。42G なら42行目です。エラーメッセージが行番号を出してきたとき、そのまま打てば飛べます。
gg も同じで 1gg は1行目です。行番号を表示しておくと(set number)この移動が使いやすくなります。
gg と G は行の先頭へ行く
gg と G は、飛んだ先で桁を保ちません。その行の最初の非空白文字、つまり ^ と同じ位置に止まります。この挙動は startofline というオプションが決めていて、桁を保ったまま飛びたい場合は set nostartofline にします。
ファイルの末尾へ行くつもりで G を押したのに桁が左端に寄っている、と感じたときの理由はこれです。
$ が指すのは行末の文字そのもの
$ はノーマルモードでは行の最後の文字の上に止まります。最後の文字の1つ先ではありません。行末に文字を足したいときに $ のあと i を押すと1文字手前に入ってしまうので、カーソルの右に挿入する a を使うか、この2つをまとめた A を使います。
$ はモーションなので削除とも組み合わせられます。d$ でカーソル位置から行末までが消え、これは1キーの D と同じです。第2章で扱います。
行番号で飛ぶもう1つの書き方
行番号を指定するには 42G のほかに、コマンドラインで :42 と打つ方法もあります。どちらも42行目へ移動します。: のほうは最後に Enter が要りますが、打ち間違えたときに Backspace で直せるという利点があり、桁数の多い行番号ではこちらが扱いやすくなります。
エラーメッセージや git blame の出力から行番号を拾ってくる場面は多いので、どちらか片方でも指に入れておくと役に立ちます。
飛んだあとは Ctrl-o で戻れる
gg や G、行番号を指定したジャンプは、Vimがジャンプリストという履歴に記録します。ファイルの末尾を確認してから元の場所に戻りたいときは Ctrl-o を押せば飛ぶ前の位置に戻れます。第5章で扱います。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| 0 | 行頭(1桁目)へ |
| ^ | 行の最初の文字へ |
| $ | 行末へ |
| gg | 1行目へ |
| G | 最終行へ |