← Vim道場

カーソルを動かす

Vimはカーソルを動かすのに矢印キーを使いません。ホームポジションから手を動かさずに済むよう、h j k l の4つのキーが上下左右に割り当てられています。まずはこれを指に覚えさせるところから始めます。

第1章 まず動かすレッスン 1 / 36

なぜ矢印キーではないのか

h j k l はキーボードのホームポジション(右手の人差し指から小指)にそのまま並んでいます。矢印キーに手を伸ばすと右手がホームポジションから外れ、戻すときに位置を探し直すことになります。1回あたりは0.5秒程度でも、編集中は何百回と繰り返す動作なので差が出ます。

この練習ページでは矢印キーを押しても動きません。押すと「h を使ってみましょう」と表示されるので、意識せず矢印に手が伸びたときの気づきに使ってください。

カーソルは「文字の上」にある

多くのエディタではカーソルは文字と文字の間にある縦棒ですが、Vimのノーマルモードではカーソルは1文字の上に乗っていますx で「カーソル位置の文字を消す」、r で「カーソル位置の文字を置き換える」といった操作は、この前提があって初めて意味が通ります。

そのため行末では、最後の文字の上までしか進めません(挿入モードだけは1つ先まで行けます)。l を押し続けても行が変わらないのはこのためです。

hjkl がこの並びになっている理由

viが書かれた当時に使われていたADM-3Aという端末のキーボードでは、h j k l のキートップに左・下・上・右の矢印が刻印されていました。独立した矢印キーが無い端末だったので、カーソル移動をこの4つに割り当てるのは当時として自然な選択でした。

いまのキーボードには矢印キーがありますが、割り当てが残ったおかげで、右手をホームポジションから外さずに移動できるという利点だけが手元に残っています。j が下向きなのは、小文字の j に下へ伸びる線があるからだと説明されることが多く、覚えるときの手がかりになります。

hjkl だけで長い距離を動かさない

この練習では印まで h j k l で動きましたが、実際の編集で10回も20回も連打することはありません。単語単位で飛ぶ、行番号を指定する、検索で目的の文字列まで飛ぶ、といった移動で近くまで一気に行き、最後の1文字か2文字を h l で詰めるのが普通の使い方です。

次のレッスン以降に出てくる移動のキーは、すべてこの「近くまで一気に行く」ためのものです。h j k l は移動の主役ではなく最後の微調整を担当する、と考えておくと覚える順番が整理できます。

行の長さが変わっても桁を覚えている

長い行から短い行へ j で下りると、カーソルは短い行の行末に寄ります。そのまま j で長い行に戻ると、元いた桁に復帰します。Vimが「いま何桁目にいるか」とは別に「本来いたい桁」を覚えているためで、この練習ページのエディタも同じ挙動にしてあります。

この記憶は hl で横に動かした時点で更新されます。縦に動かしただけのつもりで桁がずれたように見えるときは、途中で横に動かしていないかを確かめてください。

このレッスンで扱うキー

キー動き
h左へ1文字
j下へ1行
k上へ1行
l右へ1文字

関連記事

レッスン一覧へ戻るキーの逆引き一覧検定を受ける