「なんで HJKL なの? ホームポジションに指置くこと考えたら JKL; じゃないの?」という話題が Vim のメーリングリストに出ていた。確かにそうだ。いつも人差し指を J に置いてるけど、カーソルを移動するときだけ中指に変えるよね?
それに対する返答。
Sven Guckes, Fri 2011-12-16 @ 14:42:05+0100:
If I remember correctly, Bill Joy’s terminal had no cursor keys, but the
H, J, K, and L keys had arrows painted on them, hence the choice of
movement commands for vi.記憶が正しければ、ビル・ジョイ(Vim の元となった Vi の作者)が使ってたターミナルにはカーソルキーがなかったんだそうな。その代わり、H, J, K, L のキーに矢印が書いてあったんだ。だから彼は移動コマンドのキーにそれらを選んだんだよ。
Wikipedia にも記載があった。このターミナル(ADM-3A)では Ctrl–HJKL でカーソルを移動したらしい。
On 2011-12-16T13:26:22, Taylor Hedberg wrote:
Exactly. He used an ADM-3A. The ADM-3A keyboard had an escape key
more close to the home row too.その通り。彼は ADM-3A を使ってたんだ。この端末のキーボードはエスケープキーもホームポジションにより近い位置にあったんだよね。
なるほど。普段 HHK 使ってるから気にしなかったけど、エスケープキーは(現代の)普通のキーボードでは押しにくいよね。
他に挙げられていた理由としては、「L の右が必ず ; とは限らないんだぜ。AZERTY 配列とかな!」とか「Ctrl-H はバックスペースで、Ctrl-J は改行を表すじゃん。だから左と下を表すんだよ。」なんていう意見もあった。どちらもそれらしいね。
ついでに調べてみると、AZERTY 配列の歴史は 19 世紀に遡るそうだが、フランス語圏で主に使われるものなのでお目にかかったことはない。「キーボード取り扱い数日本一」(公式サイトより)なクレバリー2号店に行けばあるかも知れない。
Ctrl-H がなぜバックスペースを表すのかについては Wikipedia に記載があった。ASCII コードではバックスペースを 0x08
に定義しており、アルファベットで 8 番目に当たる H を使ったのだそうだ。Ctrl-J が復帰(CR)を表すのも、同じく 10 番目のアルファベットだから ASCII コードの 0x0A
(10 進数で 10)を与えたのだろう。
もっとも、Vim において Ctrl-J は復帰(CR)ではなくて改行(LF)の様な動作はするがそこはそれ。こまけぇこたぁいいんだよ!!