Vimの相対行番号(relativenumber)で縦移動を強化する
「8行下に移動したい」と思ったとき、行番号を1行ずつ数えるのは面倒です。相対行番号を表示すれば、カーソルからの距離がそのまま数字で見えるようになり、{数字}jのようなカウント付き移動が驚くほど使いやすくなります。
| 設定 | 表示 |
|---|---|
numberのみ | 絶対行番号 |
relativenumberのみ | 相対行番号(カーソル行は0) |
| 両方 | カーソル行だけ絶対、他は相対 |
設定方法
set relativenumber
この1行を設定ファイルに書くだけで、カーソル行を基準に上下の行番号が相対値で表示されるようになります。カーソル行自体の番号は、通常は0または実際の行番号(後述の組み合わせ設定次第)で表示されます。
絶対行番号と組み合わせる
set number
set relativenumber
両方を同時に有効にすると、カーソル行だけは実際の行番号(絶対値)、それ以外の行は相対値、というハイブリッド表示になります。
1 foo()
2 bar()
3 baz()
4 qux()
5 end
:set number relativenumber2 foo()
1 bar()
3 baz()
1 qux()
2 end
今何行目にいるかを把握しつつ、周囲への移動距離も一目で分かるため、この組み合わせで使っている人が多くいます。
使い方の実例
相対行番号が見えている状態で、8行下に見えている行へ移動したいなら8j、5行上なら5kと打つだけで済みます。目で見た数字をそのままカウントとして打ち込めるので、暗算する必要がなくなります。
挿入モードでは絶対番号に戻す
autocmd InsertEnter * set norelativenumber
autocmd InsertLeave * set relativenumber
文章を打っている最中は移動距離より現在地の方が気になることが多いため、インサートモードに入ったら自動的に絶対行番号へ切り替える設定を組んでいる人もいます。編集と入力それぞれに合った表示を自動化できます。
一時的に切り替える
:set relativenumber! " トグル
文章を書いているときは絶対行番号だけのほうが読みやすく、コードを編集するときは相対表示が便利、というように場面で使い分けたいなら、トグル用のマッピングを用意しておくと切り替えがスムーズになります。
nnoremap <Leader>n :set relativenumber!<CR>
numberとrelativenumberを両方有効にすると、現在地の把握と距離感の両立ができます。カウント付きの縦移動を多用する人ほど恩恵が大きくなります。
相対行番号を知る前は、目的の行までひたすらjを連打するか、目分量で大体の回数を打って微調整していました。設定してからは見えている数字をそのまま打つだけで正確に移動できるようになり、特に長い関数の中を行き来する作業で体感速度が大きく変わりました。インサートモードで自動的に絶対番号へ戻す設定を足してからは、違和感なく使い分けられています。
慣れるまでは違和感があるかもしれない
普通のエディタに慣れた目には、行番号が動くたびに変わって見えるこの表示は最初は違和感があります。とはいえ数日使い続ければ「上の数字」「下の数字」として自然に読めるようになることが多くあります。合わなければすぐset norelativenumberで戻せるので、まずは短期間試すとよいでしょう。
まとめ
相対行番号はVimの縦移動を強化する定番の設定です。絶対行番号と組み合わせることで、現在地の把握と移動距離の両方を同時に扱えるようになります。