Vim::viのカーソルはなぜhjklか?
viのカーソル操作は←h/↓j/↑k/l→ で,かなり広くキーボード操作UIとして浸透している.
例えばGMailの受信リストを上下するのはj,k
おいらのようなVimちゅはカーソルがhjklで動かないとイラっとする.
ではなぜhjklなのか?
その回答として,こんなページが.
「Bill の使っていた端末が,ADM-3Aだったから」(チコちゃん風)
◆ちょっと解説しようかな.
★ビルってだれ?
あと,SunというWorkStationを開発したり,Java開発にかかわったり.
一言で言えば,Unix世界の神様みたいな人.←Linuxじゃないよ
★ADM-3Aってなんだ
当時はパソコンなんてものはなくて「コンピュータ」といえば馬鹿でっかい箱が立ち並んで,部屋を占拠していた.
https://gyazo.com/48ac9118a1b63fb90d74ef73d1eeae21
本体を直接いじれる人はごくわずかのエンジニアだけ.
コンピュータを使いたい人は本体からニョロニョロとケーブルで繋ぐ「シリアル端末:terminal」で操作した.
ADM-3AはCRTつまりブラウン管を持った端末としては最も初期のものだ.
https://gyazo.com/8aea3b9633fefddf3d341516b6988bfd
紙テープや紙カードを大量消費せず,目の前の画面でプログラム入力ができるのは画期的なことだった.
ADM-3Aでは,"Ctrl+H"はASCIIコードのBackSpace,"Ctrl+J"はLineFeedが発行される.
"Ctrl+L"に→,"Ctrl+K"に↑はASCIIコードにはなく,いままでのシリアル端末にはない拡張機能だろうと.
それはADM-3AがCRTという「スクリーン」を持ったからだろう.
これがなかったらviは別物として生まれていたかもしれない.
★Billくんはviを考えついた
で,BillくんはUCBの院生のとき(1976年頃),この端末をいじって考えた.
「スクリーンがあるんだったら,画面いっぱいに読み込んだテキストを自由に編集できるエディタがほしいよね」と.
これが,vi.
じつはviは,コンピュータ史上初といっていい,最初の「スクリーンエディタ」.
※ちなみにviという名前は"Visual Editor"から来てる
いまパソコンを触ったことのある人なら「あれ?どういうこと?」と思うと思う.
Windowsのおまけについてる「メモ帳」ですら,カーソルを動かして自由にテキストをコピペしたり編集したりできるから.
どういうことかというと,こういうこと.
CRTを使ってカーソルを2次元に動かすという概念は,当時の端末操作にはないものだった.
この感覚はシリアルラインや電話回線での通信を経験した人(パソコン通信とか)なら理解できると思う.
カーソルを動かすというのは,実は行をまるごと描画し直していることにほかならない.
通信速度が遅かった時代,(直結でも9600bpsとかが高速といわれた),そんなことをするととんでもなく時間を食う.電話代も食う.
実際にBillくんが使っていた環境は1200bps程度だったそうな.
なので,入力した文字を訂正する場合は,右端からBSで順に消して書き直すのが普通だった.
★論理的に編集するエディタed
当時,Unix標準のエディタは「ラインエディタ」といって,行ごとに論理的に編集するもの.
edというエディタはカーソルの概念はなく,行指定してそこに対して行うべきコマンドを記入する.例えば ▼▼
1,5s/aaa/bbb/g
これは1行から5行に対して,行内すべての文字列"aaa"を"bbb"に置換しろという命令.
これはこれで,慣れれば便利.
ただ,10000行とかそういう長大なプログラムを編集するのはやはり苦痛がともなう.
ちょっとまて.
これって,viを使っている人はけっこう見たことのあるコマンドだと思う.
そう.viでも上のコマンドはそっくり使える.
じつはviエディタはedコマンドを踏襲しているのだ.というか,
viはedにカーソルを2次元で動かせる拡張を追加したエディタなのだ.
★exのビジュアルモードがvi
Billくんはedの機能つまりラインコマンドモードとは別に,ビジュアルモードをもつように拡張した.
それがexエディタ.
viというのはラインモードのexエディタからビジュアルモードを立ち上げるコマンドのことだ.
※実際,現在のLinuxなどのUnix互換OSでは,exコマンドとviコマンドは同一ルのシンボリックリンクとして存在する.
※まあいまではexを起動すると「ex modeだけどviっていれれば通常モードになるよ」とか言われるから,viがデフォルトになってるわけだが.
★viでカーソルを動かすキーを決めなきゃ→hjklでいいんじゃね?
Billくんが使っていたADM-3A端末のキーボードには矢印が書いてあったから,そのとおりにカーソルが動くとわかりやすかったわけ.
https://gyazo.com/7d1163afa73ba398c2c7fb77d65f9aaf
いまのPCにはこんな矢印がないんで,vi初学者はすっごく戸惑うわけだけど.
まあ慣れればね.
ちなみに,HとLは右手ホームポジションの人差し指と薬指だからわかりやすい.
JとKは戸惑うが,先輩に教わったのは 「Jは下矢印っぽいだろ」
なるほど.コツは,「J=下」だけ覚えておくことだ.
viカーソルに慣れちゃうと,他のアプリでもWebPageでもこのキーで動かしたくなる!
※ちなみにおいらはAutoHotKeyてツールを使って,「無変換+j/k/l/h」をカーソル行頭/行末ジャンプやpagedown/pageupに割りあてている.便利.
viのカーソル移動キーのお話でした.