Vimのhjklと矢印キー、結局どっちを使うべきか
矢印キーでも移動できるのに、なぜVimmerはわざわざhjklを使うのか、最初は意味が分かりませんでした。実際にホームポジションから手を動かさずに操作してみると、その理由がはっきり分かりました。
| キー | これだけ覚える |
|---|---|
| hjkl | 左・下・上・右へ1文字ずつ移動 |
| 矢印キー | 同じ動作。全モードで使える |
| 5j / 3l | カウントを前置して複数文字分まとめて移動 |
2つの移動手段
| 方式 | 左 | 下 | 上 | 右 |
|---|---|---|---|---|
| hjkl | h | j | k | l |
| 矢印キー | ← | ↓ | ↑ | → |
矢印キーはすべてのモードで使えるのに対し、hjklはノーマルモードとビジュアルモードでのみ動作します(インサートモードでは通常の文字入力になります)。
hello
hello
hjklが推奨される理由
最大の理由はホームポジションから手を離さずに済むことです。矢印キーを押すには右手をキーボードの右下まで移動させる必要がありますが、hjklはホームポジション付近の右手の位置にそのまま配置されています。移動のたびに手の位置を大きく動かす必要がないぶん、タイピングの流れを止めずに編集を続けられます。
jとkの向きが直感と逆に感じる人もいますが、これはキーボード上でのタイプライター的な配置(上の段が上方向、下の段が下方向に対応しない)に由来するもので、慣れの問題としてすぐに解消することが多いです。
カウントと組み合わせる
5j " 下へ5行移動
3l " 右へ3文字移動
数字を前置きすれば、その回数分まとめて移動できます。近距離ならこれで十分ですが、10行以上先に移動したいなら{行番号}Gや検索コマンドのほうが速いことが多いです。近距離はカウント付きのhjkl、遠距離はジャンプ系コマンド、と距離に応じて手段を切り替えるのが実用的です。
矢印キーのほうが有利な場面
絶対にhjklを使わなければならないわけではありません。インサートモード中に少しだけカーソルを動かしたいだけなら、いちいちEscでノーマルモードに戻るより矢印キーのほうが早いこともあります。またVimに不慣れな人と画面を共有しながら操作するときは、矢印キーのほうが直感的に伝わりやすくなります。使い分けを頑なに拒む必要はありません。
最初の数週間は矢印キーのほうが速く感じていましたが、hjklに慣れてからは他のエディタで矢印キーを使うほうがむしろ遅く感じるようになりました。慣れるまでの数週間さえ乗り越えれば、体に染みついてもう戻らなくなる類のものだと思います。今ではブラウザやチャットツールでも無意識にj/kを押して戸惑うことがあるくらいです。
キーボード配列によっては見直しが必要なことも
hjklが快適に感じるかどうかは、実は使っているキーボードのレイアウトにも左右されます。標準的な配列を前提にした位置なので、独自のキー配列やコンパクトキーボードを使っている場合は、自分の手の大きさや配置に合わせてキーマッピングを調整している人も多いです。デフォルトのまましっくりこない場合は、無理に矯正せず自分なりの配置を探ってみるのも1つの手です。
方向を逆にして、矢印キーが物理的に無い機種を選んでhjklに強制的に慣れる、という進め方もあります。どんな観点でキーボードを選ぶかはVimmerがキーボード選びで重視すべきポイントに、実際の機種を並べた比較はプログラマー向けキーボード比較にまとめています。
まとめ
hjklと矢印キーはどちらも1文字移動という点では同じですが、ホームポジションを維持できるhjklのほうが長期的には効率的です。単語単位・行単位のより大きな移動は単語移動や行頭/行末移動を参照してください。