原文: How Emacs beat vi in the Editor Wars from TREVOR JIM
この暗い時代1、人々は切に明るいニュースを欲している。ありがたいことに、私には報告できることがある。Emacsがviにエディタ戦争で勝利を収めたのだ!!
viはEmacsよりよく使われているだろう?、と笑いながら言う人もいるだろう。これらの虚言は完全に間違っており、そしてそのことは簡単に証明できる。
ではやってみよう。iPhoneを取り出しBluetoothキーボードを繋いでほしい。そしてブラウザを立ち上げアドレスバーに文字を入力してみよう。そこでEmacsのキーバインドをいくつかためそう。Ctrl-a
: 行頭に行く、Ctrl-e
: 行末に行く、Ctrl-b
: 一文字下がる、Ctrl-k
: 行削除、Ctrl-d
: 一文字消す、Ctrl-y
: ヤンク。
そう、Emacsはあなたのブラウザの中にいるのだ!2億以上のiPhoneが出荷されているので、2億以上のEmacsがインストールされていることになる。そしてもしほかのスマホやデスクトップのブラウザを試したとしても、同様にEmacsが見つかるだけだ。そこにviは無い。
証明完了だ、負け犬諸君!
キーバインドの重要性
もしかしたら、あなたは疑問に思っているかもしれない。本当にキーバインドだけでEmacsの優位性を判断してよいのか、と。
安心したまえ、友よ。どんなエディタでも大半のユーザーは、先に述べたような基本機能(行頭に移動したり、行を削除したり、、、)しか使っていない。そういった人々にとっては、Emacsとviは機能的に同等で、どちらも同じくらい強力だ。
そして、もし2つのエディタが同じ機能しか持っていないならば、何がそれらを区別するのか?それは、エディターがどのようにして機能をユーザに公開しているのか、すなわちユーザーインターフェースだ。そしてEmacsとviのような、マウス以前の文字ベースのターミナルしかない過去に開発されたエディタは、ユーザーインターフェースとはキーボードの使い方、すなわちキーバインドだ。
Emacsのキーバインドの何がviより優れているのか
Emacsのキーバインドはvi優れていることは証明した。Emacsは市場で勝利を収め、viは絶滅しようとしている。しかし、なぜ Emacsが優れているのだろうか。
この回答は、今日広く使われるエディタ機能であるカットアンドペーストの開発者であるラリー・テスラーの言に依りたい。カットアンドペースト以前、ドキュメントの文字ブロックをエディター中で移動させるのは、複雑で面倒なコマンドを実行する必要があった。その複雑なコマンドはエディタのモードであり、カーソルを動かしたり文字を挿入したりするような作業とは別物だった。
テスラーのカットアンドペーストにより、新しいモードを必要とせず文字ブロックの移動が可能となった。カットとペーストの操作の間に、ユーザーは文字を挿入したりカーソルを移動させたりということが普通にできた。つまり、挿入/移動ができるノーマルモードのままで、単に文字列を切りとりそれを貼り付けるだけで、文字ブロックを移動させることが可能になったのである。そこには新しく複雑なモードを学ぶ必要はない。
これがテスラーがモードレスと呼んだものだ。実際のところ、現在においても全てのエディタは一つ以上モードを持っているが、テスラーはモードがすくなくなればなるほど、エディタも使いやすくなると主張しており、Emacsとviはそれを見事に示している。
viには古くからのジョークがある。 viは立ち上げたが最後、それを終了することができない。
もちろんこれは、viではよくある事実、あるモードの中にはまり込んでしまい、どのモードにいるのかわからなくなったりviが終了できるモードに行くためのキーバインドがわからなかったりで、そこから抜け出すことができない、から来ている。例えば、viには文字を挿入できるモードが有り、別のモードではカーソルを移動したり文字を消去したりすることができ、また別のモードではエディターを終了させることができる。これが「vi 終了 やり方」がGoogle検索の上位にきてしまう理由だ。
それとは対象的に、Emacsは先程述べたようなことが全てできるようなモードから始まる。一つのモードの中にあらゆる機能が、ご想像の通り、コントロールキーやメタキーを使った大量のキーバインドによって押し込められているのだ。
正確に言えば、Emacsのモードは一つではなく、多くのモードを持っている。しかし大半のモードは単に基本モードを拡張し、より多くのキーバインドによって追加機能を実行させている。結果として、終了コマンドはどんなモードでも同じキーバインドにより実行できる。言い換えれば、Emacsユーザーの指が覚えていることは、どのモードにいようが大体は動作するのである。
これがvimではなくEmacsがiPhoneブラウザに存在する理由である。それはブラウザの機能拡張(アドレスバーの最初や最後に動くこと)を、新たのモードの導入なしに実現し、文字入力という単純なタスクをそれらの機能拡張が邪魔しないようにしているのだ。こうして、ユーザーは機能拡張を知らなかったり気づかなかったりするユーザが、異なる編集モードに閉じ込められることが決して無いようにしているのだ。
Emacsを超えて
Emacsは素晴らしいエディターだが、今日ではエディタはそう重要ではなくなっている。大部分の時間、私達はコンテンツを消費するばかりで、生み出すことはない。ウェブブラウザが今日のソフトウェア世界の中心だ。そしてブラウザのアドレスバーに少しばかりのEmacs成分が含まれているからと言って、残りのユーザーインターフェースはEmacsからははるか遠いところにいる。ブラウザのキーボードサポートはひどいものだ。大部分のウェブブラウザはキーボードだけを使って操作するのは不可能で、マウスやタッチスクリーンが不可欠だ。
主要なブラウザにキーボードサポートを取り入れようとする取り組みはいくつか存在する。Conkerorは私のお気に入りだったが、古い、サポートが切れたテクノロジ(XULRunner)に依存しているため、未来はなさそうだ。現在のところ、tridactylが良さそうだが、Firefoxでしか(今の所)動かないし、キーバインドはEmacsではなくviベースだ。
より根本的な問題はブラウザメーカーがキーボード操作を全く、少なくとも十分には考慮していないという点だ。拡張機能でできることは不十分であり、キーバインドもサポートしていない。WebブラウザがEmacsになるには、長い時間待たないといけないだろう。
訳注: 2020年8月現在、コロナ禍やBLM運動などを指していると思われる ↩