エディタ戦争
エディタ戦争(editor war)は、プログラミングを行う人々(特にハッカー文化に属する人々)の間で続いている、どのテキストエディタが一番よいかというテーマの論争を指す。その中でも二大陣営といえるのは、vi愛好派とEmacs愛好派である。
ハッカー文化においては、愛好するソフトウェアを宗教的狂信とも言える尊敬を持って扱う伝統があり、そのようなソフトウェアの中でもテキストエディタはもっとも一般的である。自らの選択したエディタが最善であると信じるグループ間で数々の論争(フレーム)が発生してきた。もっとも、そのような論争の参加者のほとんどは、からかい半分であると理解している(ユーモアの節参照)。似たような論争はオペレーティングシステムやウェブブラウザ(ブラウザ戦争)、プログラミング言語にもあるし、コードの字下げスタイルのような傍から見れば些細なことでも論争となってきた。
エディタ戦争においては、vi と Emacs というUNIX系オペレーティングシステムで最も一般的な2つのエディタの信奉者の間で主に行われている。UNIXのユーザーやプログラマの多くは、どちらかのエディタを使用している。また、大抵の人は両方の使い方を知っており、それもあってどちらが良いかを判断できる立場にあると考えている。さらに、これらのエディタは他と比較して急勾配な習熟曲線を持っており、それはこれらエディタのユーザーがその使い方を学習するために多大な時間を要したことを意味している。
vi と Emacs の重要な違いは次の通りである:
vi はモードのあるエディタであるが、Emacs にはモードがない。vi ではテキストの変更やカーソルの移動を非常に単純なキー入力のコマンドで行うため、それらコマンドとテキスト内容としてのキー入力の区別が必要となる。結果として、ユーザーはテキスト入力モードとコマンド入力モードを切り替えながら編集を行うことになる。
vi は小型で高速だが、(少なくとも本来は)カスタマイズがあまりできない。Emacs は低速(特に立ち上げ時)だが、カスタマイズは無制限である。
GNU Emacsはテキストモードのコンソールのほか、グラフィカルユーザインタフェース (GUI) への表示をサポートしており、一般的には GUI アプリケーションとして利用される。一方 vi の標準的なサポートはテキストモードのコンソールに留まり、 GUI 環境では GUI 機能を伴うターミナルアプリケーションを介して利用される。また vi の派生版である vim には、 GUI 機能を備えた gvim というアプリケーションが存在する。(参考: http://www.vim.org/download.php#pc)
また機能セットと立ち上げ時間により、ユーザの利用形態にも差異が生じる傾向がある。
vi ユーザーが外部コマンドを実行する場合、 vi のコマンドモードは用いられず適宜 vi は終了され、UNIXシェルからコマンドが実行される。
一方、 Emacs のユーザーが外部コマンドを実行する場合、 Emacs は終了されず組み込まれたシェルモードを介してコマンドが実行される。
vi は UNIX系オペレーティングシステムには必ず存在し、POSIX標準にも含まれている。標準Cライブラリで実装できるので、UNIX、Linux、AmigaOS、DOS、Windows、Mac OS、BeOSなど各種OSで動作する。
vi はある意味で WYSIWYGここでは通常の意味ではなく、「どこにある vi でもほとんど同じ」という意味。である。vi ユーザーはほとんどカスタマイズをしないが、Emacs のヘビーユーザーはカスタマイズを行うことが多く、自分のカスタマイズが使えない環境では不便さを感じる。
vi は 忍び寄る機能主義 (creeping featurism) に陥っておらず、Emacs よりも小型で高速。オーバヘッドも少ない。
vi は UNIX の設計思想("do one thing, and do it well"; 1つのことだけをうまくやる)に適合している。UNIX は十徳ナイフを作るものではなく、簡単な仕事をこなす軽いツールを作ることをよしとする。
vi のコマンドは Ctrl とか Alt といった修飾キーをほとんど使わずに入力できる。これにより腱鞘炎になる可能性が減る。
Emacs は vi よりもコマンドが豊富である。
Emacs はLISPの方言であるEmacs Lispによるスクリプト記述が可能である。
Emacs には viper-mode という vi 互換モードが含まれている。
Emacs ではテキスト入力モードとコマンド入力モードを切り替える必要がない。
GNU Emacs はカレンダー計算ができ、長期暦やDiscordianもサポートしている。これは vi にはない。
Emacs には40以上のプログラミング言語やマークアップ言語用の編集モードがある(Java、Perl、LaTeX、C、C++、Objective-C、FORTRAN、LISP、Scheme、Pascal、Bashなど)。
Emacs は英語以外の21の言語の入力と表示をサポートしている(中国語、チェコ語、ヒンディー語、ヘブライ語、ロシア語、ベトナム語、その他)。
Emacs はテキストファイルからPostScript出力を生成できるし、LaTeXやTeX、さらにはウィキペディア用の編集モードまである。
Emacs 自身をシェルとして使用でき、各種プラグインを使うことで通常エディタから抜けないと実行できない作業までこなす。例えば、ファイルのマージやdiff機能、更新ログの保守、デバッグ操作、バージョン管理システム、ファイルやディレクトリの操作、Makeファイル作成、gnusを使ったニュースグループ閲覧などである。
Emacs は Emacs Lisp によって容易に拡張可能であり、vi よりも UNIX の精神をよく表している。エリック・レイモンドらの主張によれば、Emacs は単なるエディタプログラムではなく、必要に応じてモジュールを追加可能な移植性の高いフレームワークである。
Emacs はQWERTY配列に依存していない。vi のカーソル移動は "hjkl" キーで行われ、これはキー配列に依存している。
様々なプラットフォームに移植されており、各種OSで動作する。Unix系(GNU/Linux、BSD系、Solaris、AIX、IRIX、macOSなど)、MS-DOS、Microsoft Windows、AmigaOS、OpenVMSなどで動作する。Unix系ではOSに同梱されることが多い。
議論においてしばしば、edこそ「標準テキストエディタ」であることが指摘されている。
リチャード・ストールマンは冗談で Church of Emacs(Emacs教会)を設立し、vi vi vi(ローマ数字の6-6-6)を「獣のエディタ」と称したが、必ずしも vi 利用に反対の立場をとったわけではなく、プロプライエタリソフトウェアをアナテマと呼んだ(「viのフリーソフトウェア版を使うことは罪ではなく、苦行である」)。同教会は独自のニュースグループを持ち(alt.religion.emacs)、このパロディ化した宗教の教義をポストしていた。
ストールマンは冗談として自身をSt IGNU−cius(聖イグヌチウス; 聖イグナシアスにかけた洒落)と称した。
vi 信奉者は対抗して Cult of vi を設立した。 強硬なEmacsユーザーはこれを「(vi派によるより優れたemacs派の)猿真似」であると主張している。
vi の入力モード問題について、Emacs 側は vi の2つのモードを "beep repeatedly"(ビービー鳴らすモード)と "break everything"(何もかも台無しにするモード)と揶揄した。vi 側は Emacs のコマンド入力によって手根管症候群が起きると揶揄し、EMACS を何らかの頭字語であるとして様々な元となる言葉を考案した(例えば "Escape Meta Alt Control Shift" など)。
ほかにも "Eight Megabytes And Constantly Swapping"(8メガバイトで常にスワップされている)あるいは "EMACS Makes Any Computer Slow"(EMACSはどんなコンピュータも低速にする。再帰的頭字語)、"Eventually Munches All Computer Storage"(結局全ての記憶容量を食らい尽くす)の略だとも揶揄された。これらは Emacs が非常にリソースを消費することを指したもので、当時としては 8メガバイトのメモリは非常に大きかった。Emacsのディストリビューションには、こういった頭字語の一覧が付属している。
Emacsが機能的に肥大していることを揶揄し、vi側はEmacsを「偉大なオペレーティングシステムだが、きちんとしたエディタだけが欠けている」と評した。
UNIXユーザーの間では、Emacsの複雑さへの揶揄もこめて、修飾キーを押下しながら自分の名前を入力したらどうなるかを確認するという遊びも行われていた。同様の「ゲーム」はEmacsの前身であるTECOでも行われていた。
Word War vi はエディタ戦争を題材としたディフェンダー風のシューティングゲームである。
かつては vi を手本とした様々な小型エディタが開発された。これは当時のメモリ容量が小さかったため、メモリ使用量を抑えることが重要だったためである。その後コンピュータのメモリ容量が増加するにつれ、vimに代表されるviクローンはサイズ面でもコードの複雑さの面でも成長していった。このため、vi派とEmacs派が主張していた利点や相手側の欠点は大差ない状況となっていった。例えば拡張を加えないvimであっても、ディスク上に格納するのにオリジナルのviの10倍の領域を必要とする。また、vimは様々な拡張が可能で、古いバージョンのEmacsと比べると低速である。しかし、viもEmacsもEclipseのような統合開発環境に比べればずっと軽量である。
ティム・オライリーは1999年、オライリーメディアから出版したviの入門書がEmacsの入門書の2倍売り上げたと述べている。これは、viの方が人気があるともとれるし、viの方が習得が難しいので本が売れたともとれる。多くのプログラマはEmacsやvi、およびそれらの派生エディタを使っている。例えばリーナス・トーバルズはMicroEMACSを使っている。
viやEmacsの互換エディタ以外では、picoとそのFLOSS版であるnano、neなどのエディタにも熱心な支持者がいるが、viやEmacsほどではない。
GNU/LinuxやBSD系を代表とする多くのOSでは、複数のテキストエディタが同梱されており、ユーザーの需要に応えるようになっている。例えば、macOS にはデフォルトで Emacs、vim、nano、ed が搭載されている。
2021年7月23日のGIGAZINEの記事にて、Visual Studio Codeがシェアを拡大しつつあり、50%を超えるシェアを獲得していると報道された。