Emacs

出典: Wikipedio


Template:Infobox Software

Emacs(イーマックス)とは、テキストエディタである。高機能でカスタマイズ性の高いスクリーン・エディタとして人気が高く、特にUNIXのプログラマを中心としたコンピュータ技術者に愛用者が多い。

目次

概要

ガイ・スティール、Dave Moon、Richard Greenblatt、Charles Frankstonらの書いた1組のTECOマクロ・エディタであるTECMACとTMACSのアイデアに触発され、1975年リチャード・ストールマンがガイ・スティールとともに書いたTECOエディタのエディタ・マクロ (Editor MACroS) 一式がオリジナルのEMACSである。 その後、何年もの間に多くのEmacs実装が現れたが、今日よく使われているのはリチャード・ストールマンが1984年に開発を始め今日に至るまで管理しているGNU Emacsと、1991年にGNU EmacsからフォークしたXEmacsである。 強力な拡張言語であるEmacs Lispを使うことにより、コンピュータ・プログラム編集コンパイルから、ウェブの閲覧に至るまで様々な仕事をこなすことができる。

The GNU Emacs Manualでは、Emacs自身を「the extensible, customizable, self-documenting, real-time display editor. (拡張可能でカスタマイズ可能で、自己説明的で、リアルタイム表示を行うエディタだ。)」と説明している。

大文字で始まる「Emacs」と、小文字の「emacs」を区別する人もいる。 大文字で始まる「Emacs」は、リチャード・ストールマンの作ったエディタから派生したエディタ(特にGNU Emacs、XEmacs)を指し、小文字の「emacs」は、たくさんある個別のemacs実装を指す。 英語の"oxen"からの類推で、"emacs"という英語の複数形はemacsenとつづられる。たとえば、Debianの互換Emacsパッケージは、emacsen-commonとなっている。 Collins English Dictionaryには、emacsenという複数形だけが掲出されている。Windows用アプリケーションであるNTEmacsMeadowxyzzyなどもemacsenに含まれる 。

Unix文化において、Emacsとviはともに伝統的なエディタ戦争における双璧をなしている。

Emacsはエディタの範疇を超え、テキスト処理のための包括的ワークベンチ、あるいはアプリケーションソフトウェア実行環境であるといえる。Emacsは長い歴史を持っており、ゼロからの書き直しを含む改良を重ね、多くの派生エディタを生み、現在に至っている。現在主流のGNU Emacsの開発はもともとはUNIX環境とVAX/VMSを主なターゲットとしていたが、各種のOSへの移植もなされてきており、Mac OS XWindowsなど多くの環境で利用することができる。

歴史

Emacsは、1970年代MIT人工知能研究所(MIT AI研)で産声をあげた。 AI研のPDP-6PDP-10オペレーティングシステムだったIncompatible Timesharing System (ITS) への導入前の既定エディタは、TECOというラインエディタだった。 現在の一般的なテキストエディタとは違い、TECOには(後のviのような)入力・編集・表示用の別々のモードがあり、文字を入力しても即座に表示されるわけではなかった。 編集されたテキストが画面に表示されてないとき、意図した文字が挿入されるようTECOのコマンド言語で一連の命令を書かなければならなかった。 この振舞は、現在も使われているedプログラムと同じである。

リチャード・ストールマンは、1974年か1972年にスタンフォード人工知能研究所を訪れ、ラボの「E」エディタを見た。 このエディタの振舞は、今のエディタのほとんどで使われている直感的なWYSIWYGであり、彼はその機能に触発されてMITに戻った。 AI研ハッカーの一人、Carl Mikkelsenは、利用者がキー操作するたびに画面表示を更新する「Control-R」というリアルタイム表示・編集モードをTECOに追加していた。 ストールマンは、この更新が効率的に動くよう書き直し、任意のキー操作でTECOプログラムが動くように利用者が再定義できるマクロ機能をTECOの表示・編集モードに追加した。

新版のTECOはまたたく間にAI研で評判となり、マクロを意味する「MAC」や「MACS」で終わる名前のカスタム・マクロの巨大なコレクションが溜まった。 2年後、どんどんばらばらになっていくキーボード・コマンド・セットを1つに統合するプロジェクトをガイ・スティールが引き受けた。 スティールとハックしたある夜の後、ストールマンは新しいマクロ・セットの文書化や拡張の機能を含んだ実装を完成させた。 できあがったシステムは"Editing MACroS"を意味するEMACSと呼ばれることになる。 ストールマンによると、Emacsとしたのは「当時ITSで<e>が略称に使われてなかったから」である。

また、ボストンの人気アイスクリーム屋「Emack & Bolio's」の店がMITから徒歩圏内にあったからとも言われている。 その店によく通っていたDave Moonはその後、ITSで使われたテキスト整形プログラムをBOLIOと名づけた。 このことは、ハッカー公案 (en:Hacker koan) のEmacs and Bolioの素となっている。

過度のカスタム化や事実上の分裂の危険に気づいたストールマンは、とある使用上の条件をつけた。 彼は後に次のような文章を残している。

「EMACSは、共同参加を基として頒布される。つまり、改良点はすべて、組み入れて頒布するために、私のところへ戻ってこなければならない」

オリジナルのEmacsはTECO同様、PDPだけで動いた。 その動きはTECOと大きく異なっていた。 そして、急激にITS上の標準編集プログラムとなった。 当初、Michael McMahonによりITSから、Unixにではなく、TenexTOPS-20オペレーティングシステムに移植された。 初期のEmacsへの貢献者には、このほかKent PitmanEarl KillianEugene Ciccarelliらがいる。

他のemacsたち

その後、他のコンピュータ・システム用に、多くのEmacs風エディタが書かれた。 Michael McMahonとDaniel Weinrebらが、 SINE ("Sine Is Not Emacs") 、 EINE ("Eine Is Not Emacs") 、 ZWEI ("Zwei Was Eine Initally"、Lispマシン用) を書いた(後者2つはドイツ語で、それぞれ1と2の意味。正しいつづりはEINS。ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い)。 1978年Bernard Greenbergは、ハネウェルのケンブリッジ情報システム研で、Multics Emacsを書いた。

Unixで動いた最初のEmacs風エディタは、後にNeWSJavaの開発で知られることになるジェームス・ゴスリングが1981年に書いたGosling Emacsだった。 これはCで書いてあり、MocklispなるLisp風構文の拡張言語を使っていた。 Mocklispにはシンボルさえなく<ref>RMS Lecture at KTH: Japanese</ref>、構文がLisp風なだけで、本当のLispではない。 1984年、これは独占ソフトウェアだった

GNU Emacs

1984年、Gosling Emacsのフリーソフトウェア版をつくるべく、ストールマンはGNU Emacsに取り組み始めた。 当初は、Gosling Emacsを基にしていたのだが、ストールマンはMocklispインタプリタを本物のLispインタプリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。 これは、揺籃期のGNUプロジェクトがリリースした初のプログラムとなった。 GNU EmacsはCで書いてあり、(Cで実装した)Emacs Lispを拡張言語としている。 最初にひろく頒布されたGNU Emacsの版は、1985年に登場した15.34だった (2版から12版まではない。初期のGNU Emacsは、「1.x.x」のように採番されていたが、1.12版の出た後、メジャー番号が変わりそうにないため、先頭の1をなくすことにした。 最初の公開リリース13版は、1985年3月にできた)。

Gosling Emacs同様、GNU EmacsもUnixで動く。 だが、GNU Emacsには、拡張言語としてフル装備のLispなどの機能があった。 そのため、すぐGosling Emacsと入れ替わり、Unixでうごく事実上のEmacsエディタとなった。

伽藍とバザールで「伽藍」式開発の例にあげられていたように、GNU Emacsの開発は、1999年まで比較的閉鎖的だった。 それ以降、公開の開発メーリングリストと匿名CVSアクセスを採用している。 開発は、単一のCVSトランクである23.1.50版で進んでいる。 管理者は長らくリチャード・ストールマンが務めていたが、2008年からStephan MonnierとChong Yidongに引き継がれている。

XEmacs

thumb|XEmacsでVM(メールリーダー)を用いてメールを表示している画面。 1991年初頭、GNU Emacs 19の初期α版を基に、Jamie ZawinskiとLucid Inc.の人たちによりLucid Emacsが開発された。 コードベースはすぐに分割し、開発チームは、単一プログラムとして併合しようとするのをあきらめた<ref>Template:Cite web</ref>。 これは、フォーク した フリーソフトウェア・プログラムのうち初期の最も有名な例である。 Lucid EmacsはXEmacsと名前を変えた。 現在ではこのXEmacsとGNU Emacsが人気を二分している。 XEmacsの「X」は、グラフィカルユーザインタフェースとしてのX Window Systemに当てた初期の中心点からか、XEmacs開発者たちの妥協の産物として「大賛成というほどではない」 (less than favorable) 名前からきている [1]。 GNU EmacsとXEmacsの両方とも、テキスト端末同様、グラフィカルユーザインタフェースをサポートしている。

その他の実装

GNU Emacsは当初、当時のハイエンドであった、32ビットのフラットアドレス空間、1 MiBRAMをもつコンピュータを想定していた。 このため、小さな再実装への道がひらかれた。 そのうちきわだつものは、以下のとおり。

MicroEMACS
Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装である。リーナス・トーバルズの使うエディタ<ref>http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/</ref>
MG
当初MicroGNUEmacsといわれていて、キーバインドが若干GNU Emacsに似ているMicroEMACSのフォーク。OpenBSDでは既定でインストールされる
JOVE (Jonathan's Own Version of Emacs)
Jonathan PayneによるUNIX風システム用の非プログラマブルなEmacs実装
Freemacs
テキスト・マクロ拡張を基本にした拡張言語をもちつつ、オリジナルのセグメント内に収めるための64 KiBメモリ制限を満たしたDOS

Emacsの日本語化と国際化、Windowsへの移植

Emacsの日本語版としてNemacs (Nihongo Emacs) が、多国語対応版としてMule (MULtilingual Enhancement to GNU Emacs) が開発された。NemacsおよびMuleは電子技術総合研究所(電総研:現在の産業技術総合研究所)の半田剣一らによるものである。Muleはアラビア文字などの右から左へ記述する文字をふくめた複数の文字集合の1ファイル中での混在と編集が可能であり、中国や、タイ等多くの国や地域で規格化された文字集合をサポートするなど、先進的かつ実用的な多用字系処理系であった(しばしば多言語処理系ともいわれる)。Muleは現在では本家のEmacsに統合され(完全ではないという人もいる)、Emacsの一機能という位置づけになっている。

GNU Emacs (Nemacs) は東京大学平野聡大阪大学の東田学によって、フリーなDOS Extender、go32/djgppによりMS-DOS上に移植され(後に emx にも対応)、demacsと呼ばれた。

Windows上では、宮下尚 (himi) によりWin32アプリケーションとしてMule 2.3をベースにしたMule for Win32、そしてEmacs 20.XをベースにしたMeadow(メドゥ)が移植・開発され、広く使われている。2004年7月7日にはGNU Emacs 21.xをベースにしたMeadow2がリリースされた。GNU Emacs自体もWindows上でコンパイル (Visual C++でコンパイルする方法とcygwinでコンパイルする方法がある)・実行が可能になってきてもおり、一時はそのバージョンをNTEmacsとよぶことがあった。近年ではバイナリ形式で配布されているので、コンパイルやインストール作業すら必要なく、zipを展開するだけでwindows上でemacsが使用可能である[2]。 日本ではフォントの扱いやIMEの扱いが優れていること、日本語の情報が豊富なことからMeadowが良く使われている。

GUIへの対応

Emacsはもとは文字端末での利用を前提に設計されていたものであるが、少なくともGNU Emacsバージョン18ではX Window Systemアプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の端末エミュレータを立ち上げ、その中で動くというものであり、ウィンドウシステムの持つ機能を十分に発揮するには至っていなかった。

EpochはこのGNU Emacsバージョン18を基にしてX Window Systemマウスや複数ウィンドウ(フレーム)機能に拡張を施したものである。

Lucid社によって開発されたLucid Emacsは、Emacsバージョン19をベースにしてさらに高度にGUIへの対応が行われた。

GNU Emacsも徐々にGUIには対応していったが、その開発スピードの遅さに不満をもったチームによってLucid EmacsをベースにXEmacsのプロジェクトが開始された(加えて、由来がはっきりせずライセンス上GNU Emacsに取り込めないコードの存在があったことも両者が分かれた理由の一つのようである)。XEmacsに対して、元のGNU EmacsをFSF Emacsと呼ぶこともある(XEmacsもGPLに従い、ある意味でGNU Emacsであるため)。

Emacsバージョン21およびXEmacsではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。

Emacs の仲間たち

Emacsの親戚を複数形でEmacsenとよぶことがある。Emacsenの公式の定義があるわけではないが、GNU Emacsを中心とした主なバリエーションには以下のようなものがある。

また、Emacsに似た機能を有するエディタとしてMicro Emacs、Mg (Micro GNU Emacs) 、Ng (Nihongo Micro GNU Emacs) などがあるがこれらは一般にEmacsenには含めない。Emacsライク(Emacs風)なエディタとなるとさらに多いが、マクロ言語としてCommon Lisp系のxyzzy Lispを実装したxyzzyなどがある。

受諾方針

GNU Emacs(や他のGNUパッケージ一般)では、コピーレフトの強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、著しい量のコード寄贈は著作権者が自身の著作権を適切に放棄または委譲したときだけ受理する方針になっている。 この方針の唯一の例外はMule(MULtilingual Extension、Unicodeや、他の言語の用字系を処理する高度なメソッドがある)のコードで、著作権者が日本国政府で著作権の委譲が不可能であった [3] 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされている。

この強制は、GNU Emacsのフリーソフトウェア・ライセンス、つまりGNU General Public Licenseと、多くの著作者と寄贈者による知的著作物であるフリーソフトウェア自体に、法的な信頼性をあたえている。

機能

本項の残りでは、今日広く使われているEmacs実装である最近のEmacs、すなわちGNU EmacsとXEmacsについて記述する。 GNU Emacsからのフォークとして始まったXEmacsとその後継版は、GNU Emacsとおおむね互換性がある。

莫大な機能一式は、文字の書体や文書の印刷よりも(それもEmacsで可能だが)、むしろそのほとんどが、利用者のテキスト操作を支援し加速するよう作られている。それゆえ、Emacsを使いこなすヘビーユーザーの文書・プログラム作成は、最小限の打鍵で効率よく行われる。 Emacsには段落の操作(削除したり動かしたり、あるいはその中で動き回ったり)に始まり、ソースコードを読みやすくする構文の強調や、利用者の定義する一括編集コマンドを動かす「キーボード・マクロ」の実行にいたる能力をもたらす多数の機能がある。

Emacsでは、文書に文字を挿入するような基本編集操作からユーザー・インターフェースの構成にいたるほぼ全ての機能は、Emacs LispというLISPの方言で制御されている。 このLisp環境の中では変数関数などを、再コンパイルやエディタの再起動を行わずにその場で修正できる。 その結果、Emacsの挙動は、直接利用者によって、または、「ライブラリー」「パッケージ」「拡張」ともいうEmacs Lispの本体を読み込むことにより、ほぼ無制限に変更できる。

Emacsには多量のEmacs Lispライブラリーがあり、インターネットにも「第三者」のライブラリーが多数存在する。 コンピュータ・プログラミングの補助を実装している多くのライブラリーが存在する。 Emacsは、プログラマが単一インターフェースでコードを編集、コンパイルデバッグするような統合開発環境 (IDE) としても使うことができる。 その他様々な機能を持つライブラリーが存在する。

EmacsのLispベースの設計の欠点は、Lispコードの読込み、解釈 に伴う性能への負荷である。 Emacsが最初に実装されたシステムでは大抵、競合するテキストエディタよりかなり遅かった。このことをジョークにした、頭文字による略語がEMACSになる文がいくつか存在する(このようなジョークは他にも存在し、例えばユーザー・インターフェースをネタにした (Escape Meta Alt Control Shift) などがある)。

  • Eight Megabyte And Constantly Swapping(8MBでちょくちょくスワップ - 8MBのメモリーが広かった時代の話)
  • Emacs Makes A Computer Slow(Emacsはコンピュータを遅くする)
  • Eventually Mallocs All Computer Storage(結局コンピュータの全記憶装置をmallocする)
  • Eventually Makes All Computers Sick(結局全コンピュータをビョーキにする)

ただし、最近のコンピュータは十分速くなり、Emacsを遅いと感じることはめったになくなった。実際、Emacsは最近のワードプロセッサよりも素速く立ち上がる。

プラットフォーム

Emacsは数多くのプラットフォーム移植されている。Unix風システム(Linux、各種BSDSolarisAIXIRIXMac OS Xなど)、MS-DOSMicrosoft WindowsOpenVMSを含む、幅広いオペレーティングシステムで動く。フリーであっても独占的であるかに関わらず、Unixシステムの多くにEmacsが同梱されている。

Emacsは文字端末のみならずGUI環境でも動作する。Unix風システムでは、MotifLessTifGTK+といったウィジェット・ツールキット、および直接X Window Systemを利用してGUIを提供している。また、 Mac OS XのCarbon インターフェース、Microsoft WindowsのGDIを使う実装もある。これらのGUI環境では、メニューバーツールバースクロールバーコンテキストメニュー などが利用可能である。

編集モード

「主モード」という編集モードにEmacsが入ることで、編集するテキストの種類に応じて振舞いを適応させる。 普通のテキスト・ファイル、多くのプログラミング言語ソースコードHTML文書、TeXLaTeXの文書や、多くの他種のテキスト用に主モードが定義されている。 各主モードはEmacs Lisp変数を調節するなどして固有の型のテキストに都合よく振る舞うように作られている。 特に、キーワードコメントなどの表示にさまざまな書体や色を用いた構文の強調をしばしば実装する。 主モードは、専用の編集コマンドも提供する。たとえばプログラミング言語用の主モードはしばしば、関数の先頭や末尾へ飛ぶコマンドを定義する。

「副モード」でEmacsの振舞をもっとカスタム化することもできる。 たとえば、Cプログラミング言語の主モードは、人気の字下げスタイルそれぞれにさまざまな副モードを定義している。 主モードは2つ以上同時に使用できないが、副モードは同時に複数を有効にできる。

カスタム化

Emacsの利用者は、自分のニーズに合わせるためにエディタをカスタム化することができる。 Emacsをカスタム化する方法は大きく3つある。

第一はcustomize拡張で、GUIを使って通常のカスタム化変数を利用者が設定できる。 これはEmacs Lispコードに取り組みたいと思わないEmacs初心者を想定している。

第二はキー操作をマクロにして入り組んだ繰返しの仕事を自動化するよう再生することである。 マクロは保存して必要時に呼び出すこともできるが、その場限りの使い捨てであることが多い。

第三はEmacs Lispを使ったEmacsのカスタム化である。 利用者用のEmacs Lispコードは、Emacsの立上げ時に読み込まれる.emacsというファイルに保存する。 .emacs<code>ファイルは、変数や既定とは違うキーの結び付きを設定したり、利用者が便利と思ったコマンドを新しく定義したりするのに用いる。 Emacsの既定の振舞からずいぶんかけ離れた風変わりなカスタム化のため、数百行に及ぶこともある。

もしEmacs Lispコード本体が一般的に便利ならば、しばしばライブラリーとしてパッケージにされ、他の利用者に頒布される。 そういった第三者のライブラリーは、インターネットで見付けることができる。たとえば、Wikipediaの記事 を編集する wikipedia-mode というライブラリーがある。 新しいライブラリーを投稿するためのUsenetニュースグループgnu.emacs.sourcesまである。一部のライブラリーは、最終的にEmacsに取り込まれて、「標準」ライブラリーとなる。

説明文字列

Emacsには最初から、各個別のコマンド、変数、内部関数の説明文字列を表示する強力なhelpライブラリーがついてきた。 この機能のため、Emacsは「自己説明的」といわれる (この用語は、説明文字列をEmacsで書いて編集できるという意味ではなく、Emacs自身が説明文字列を利用者に表示できるという意味で用いられる)。 この機能のため、Emacsの説明文字列はアクセスしやすい。 各関数には、説明文字列が含まれていて、具体的には必要に応じ利用者に表示される。 たとえば、<code>describe-keyコマンドをうごかすC-h kの後に単にキー操作を入力すると、そのキー操作に結び付いたコマンドの説明が表示される。

その後、関数に説明文字列をつける習慣は、LispJavaといったさまざまなプログラミング言語に広まった。

Emacsのhelp体系は、初心者だけでなく、Emacs Lispコードを書く上級利用者にとっても役に立つ。 もし関数や変数の説明文字列が不十分ならば、組込みのライブラリーやインストールされた第三者のライブラリーのEmacs Lispソースコードの閲覧に、help体系を使うことができる。 そのため、Emacs自身でEmacs Lispをプログラムしやすくなっている。

組込みの説明文字列のほかにも、リチャード・ストールマンの執筆したGNU Emacs Manualの電子コピーがGNU Emacsについており、組込みのInfoブラウザで閲覧することができる。 XEmacsの場合、ソフトウェア本体と同時にGNU Emacs Manualからフォークした同様のマニュアルがある他、Bill Lewis、リチャード・ストールマン、Dan Laliberte共著のEmacs Lisp Reference Manual、Robert Chassel著のProgramming in Emacs Lispも含まれている。 電子版のほかに、3種のマニュアルがフリーソフトウェア財団から書籍のかたちで刊行されている。

Emacsには組込みのチュートリアルもある。 編集するファイル抜きでEmacsを立上げると、簡単な編集コマンドとチュートリアルの呼出し方の説明が、表示される。

国際化

Emacsは、多数の自然言語で書かれているテキストの編集をサポートしている。多種のアルファベット、用字系 (script) 、書写体系 (writing system) 、文化慣習のサポートがある。 ispellといった外部プログラムを呼び出すことで、多数の言語のつづりをチェックできる。 UTF-8を含む多数の符号化体系をサポートしている。 XEmacs 21.4版と21.5版には、部分的なUnicodeのサポートが含まれている。 Unicodeのサポートでは内部的にEmacs固有の符号化を用いていて、読出しと書込みに変換が必要になる。

Emacsのユーザー・インターフェースは英語で、初心者用チュートリアルを除き、他の言語に翻訳されたことはない。

視力障害や全盲の利用者のため、音声フィードバックだけでエディタを使えるようになるEmacspeakという下位システムがある。

ライセンス

CとEmacs Lisp両方を含むソースコードは、GNU General Public License (GPL) 規約の下で調査、修正、再頒布のため自由に入手できる。 古い版のGNU Emacsの文献は、修正版の複製にあるテキストの挿入を要件とする個別のライセンスの下でリリースされた。 たとえば、GNU Emacs user's manualは、GNU Emacsの入手方法と、リチャード・ストールマンの政治的エッセー「GNU宣言」を含んでいた。 フォーク時に古いGNU Emacsのマニュアルを継承したXEmacsのマニュアルも同じライセンスである。 一方、新しい版のGNU Emacsの文献は、GNU Free Documentation Licenseを用い「不変部分」を利用して、同じ文書の包含を要求しつつ、マニュアルがGNU Manualsであることも宣言している。

Emacsの操作・特徴

起動

Unixのシェルで「emacs」と打つ事でEmacsを立ち上げる事ができる。 Emacsが立ち上がったら、Controlを押しながらx、fの順に押した後にXXXと打てばファイルXXXを編集できるようになる。

なお、Unixのシェルで「emacs XXX」と打つ事でもファイルXXXを編集する事ができる。 しかし、Emacsの文献では、編集するファイルごとに別々のEmacsを立ち上げるという悪癖がつかないよう、ファイル名ぬきでEmacsを立ち上げることを推奨している。

操作

Emacsの操作上の特徴として、キーボード・ショートカットが他のエディタとは比較にならないほど充実している事があげられる。 カーソル移動、文字の削除、改行、コピー&ペーストのように通常のエディタならホームポジションから手を離さざるを得ない作業にすらもキーボードショートカットが与えられている為、これらを覚えれば、手をホームポジションからほとんど離す事無くファイルを編集できる。したがって編集の際、目を画面から離して手をカーソルキーやマウスへと移動させるわずらわしさから開放される。

こうしたキーボード・ショートカットは、ControlキーやAltキーを用いて実現されており、ほとんどの文字キーに対し、「Control+文字キー」、「Alt+文字キー」の形のキーボードショートカットが与えられている。つまり40個以上のショートカットがある事になり、前述したような単純な操作はもちろん、「行頭・行末へ移動」、「ファイルの先頭・末尾に移動」、「一画面分上に・下に移動」、「英語一単語分前に・後に移動」といったより複雑な操作もキーボード・ショートカットにより、ホームポジションから手を離さずに行う事ができる。

なお、EmacsではControlキーを押しながら「a」を押す事を「C-a」と表記し、同様にAltキーを押しながら「a」を押す事を「M-a」と表記する。(「M」はMetaキーの略)。そこで本稿でも以下この表記を用いる。

キーボード・ショートカットの多くは英語の頭文字にしたがって割り振られているので、どのキーがどの操作に対応しているのかを比較的簡単に覚える事ができる。たとえばカーソルを右、左、上、下に動かす操作はそれぞれC-f、C-b、C-p、C-nであるが、これはそれぞれforward、backward、previous、nextの略である。 なおキー操作の説明は、C-h t(英語)あるいはC-h T(日本語)で表示させることができ、そのまま操作方法を学習することができる。


Emacsでは、さらに多くのキーボード・ショートカットを割り当てる為、2ストローク以上のキー操作でショートカットも多数用意している。たとえば「C-xC-s」(=Controlを押しながらx、sと押す)はファイルを保存する為のキーボード・ショートカットである。Emacsは2ストローク以上のショートカットを用意する事により、非常に複雑な操作をもマウスを使わずに実現しており、例えば「○○行目に移動する」、「文字コードを変換する」、「(ファイルが何らかのプログラムの場合)ファイルをコンパイルする」、「現在の文書をRCSでバックアップを取る」といった操作にすらショートカットがある。


Controlキーは必ずしも押しやすい位置に無いので、設定によりcapsキーとControlキーの位置を入れ換える人も多い。 また、これらのすべてのキー操作は前述のEmacs Lispを使ってカスタマイズ可能である。

viと比較した場合、viが編集モード、カーソル移動モードの2つのモードを持つのに対し、Emacsはそのようなモードを持たない。 またEmacsではショートカットの多くは英語の頭文字で決まっており、たとえば前述のControl+f、b、n、pはそれぞれforward、back、next、previousの頭文字である。これはショートカットがキーの物理配置で決まっているviとは対照的である。 ただしEmacs上でviの操作をエミュレートするエミュレータもいくつかある (vi-mode, viper-mode) 。

全ての編集コマンドは、実際はEmacs Lisp環境の関数を呼び出す。 文字aを挿入するコマンドのaをたたいただけでも、関数を(この場合self-insert-commandを)呼び出す。

以下にコマンドのいくつかを示す。他のコマンドはEmacsのコマンド一覧を参照。 以下で例えば、C-sはControlキーを押しながらsを押す事を指す。 同様にM-fはAltキー(Metaキー)を押しながらfを押す事を指す。 なお、M-fはEscキーを押した後で、fを押しても実行できる。

save-buffersave-buffers-kill-emacsなどのコマンドは、複数の修飾キー操作を使っていることに注意。 たとえば、C-x C-cは、Controlキーを押したままxを押し、その後、Controlキーを押したままcを押す。


コマンド キー操作 説明
forward-word M-f 1語前に移る
search-word C-s バッファ内で語を探す
undo C-/ 最後の (または、重ね押しでもっと前の) 変更を取り消す
keyboard-quit C-g 今のコマンドを取りやめる
fill-paragraph M-q 段落のテキストを 追い込んで 「詰め」る
find-file C-x C-f エディタ・バッファの中で、(指定した名前の) ファイルに立ち寄る
save-buffer C-x C-s 現在のエディタ・バッファを立ち寄ったファイルに保存する
save-with-newname C-x C-w 現在のエディタ・バッファを指定した名前のファイルに保存する
save-buffers-kill-emacs C-x C-c 変更を保存して、Emacsを抜ける
set-marker C-[space]/C-@ 切取りやコピーする場所のマーカーを設定する
kill=(cut:切り取り) C-w マーカーとポイントの間のテキストを切り取る
copy M-w マーカーとポイントの間のテキストをコピーする
yank(=paste:貼り付け) C-y Emacsのクリップボードからのテキストを張り付ける
kill-line C-k カーソルより後ろの、行の残りの部分を消す
kill buffer C-x k 現在のバッファを削除する

単一のキー操作より多くのコマンドを結び付けることのできるこの手法は、Emacsによって普及した。 これは、Emacs直前のTECOマクロ・コレクションの1つであるTECMACからとられている。 これは、Visual Studioのような最近のコード・エディタに道をひらいた。

グラフィカル・インターフェースでEmacsを使っているとき、キーボードの代わりにメニューバーやツールバーからコマンドを呼び出せる。しかし、経験豊富なEmacsの利用者には、必要なキー操作をいったん記憶してしまえばより速く操作でき便利なキーボードからのコマンド呼び出しのほうが好まれている。

一部のEmacsコマンドは、外部プログラム(つづりのチェックにispellや、プログラムのコンパイルにgcc)を呼び出し、プログラムの出力を解析し、Emacsに結果を表示することで、機能している。


Emacs小指

Emacsは、修飾キー、特に小指で押されるControlキーに依存しているため、重度のEmacs利用者は小指に痛みをおぼえることがある (cf repetitive strain injury, fat-finger)。 これは俗に「Emacs小指」と称され、viの主唱者がviに切り替えた理由としてしばしば引合いに出される。 これを緩和するため、多くのEmacs利用者は左のControlキーとCapsLockキーを交換したり、両方をControlキーに定義したりする。修飾キーを親指で簡単に押せる位置に移動して痛みをやわらげるKinesis Contoured Keyboardや、手の平で押せるようキーボードの両側に大きな修飾キーを移動したMicrosoft Natualキーボードがある。

バッファとフレーム

Emacsでは、複数のファイルを切り換えながら編集したり、同じファイルの別の箇所を同時に表示したりする事が可能である。 このような作業の為にEmacsは、バッファ、ウィンドウ、フレームという仕組みを用意している。

バッファは、直観的には「Emacsに読み込まれたファイル」だと思えばほぼ正しい(が、それ以外にも様々なメッセージを表示する為のバッファやスクラッチ用のバッファもある)。 Emacsで「C-x C-f XXX」と打ち込めば、ファイルXXXのバッファができてXXXがEmacs上に表示されるので、XXXの編集ができる。 さらに「C-x C-f YYY」と打ち込めば、ファイルYYYのバッファができてXXXの代わりにYYYがEmacs上に表示されるので、YYYを編集できる。

再びXXXが編集したくなった場合は「C-x b XXX」と打てばよい。 後は「C-x b XXX」、「C-x b YYY」によりXXXとYYYを切り換えながら、自由に編集が可能である。 今風にいえば、バッファはタブブラウザにおけるタブに相当する概念である。 「C-x b XXX」、「C-x b YYY」により、表示するタブをそれぞれXXX、YYYに切替えて編集ができるのである。

「C-x 52」を使えば、他のエディタのように、XXXとYYYを同時に表示する事も可能になる。 Emacsに「C-x 52」と打ち込むと、Emacsの画面がもう一つできあがり、あたかもEmacsを2つ立ち上げたかのような状態になる。 このそれぞれEmacs画面をフレームという。(通常のコンピュータ用語でいう「ウィンドウ」に近い)。 前述の「C-x b」を使えば、第一、第二のフレームにそれぞれXXX、YYYを表示できるので、 マウスでフレームを切り換えながらXXX、YYYを編集できる。

フレームの機能により例えば、あるフレームでプログラムのソースコードを表示しつつ別のフレームでそのプログラムのコンパイル結果を表示する事ができる。 2つのフレームを作る事と単に2つEmacsを立ち上げる事との決定的な違いは、前者の場合2つのフレームが連動している事である。 例えば前述の例で、ソースコードが表示されているフレームで「コンパイルしろ」という趣旨のキーボード・ショートカットを打てば、もう一つのフレームに表示されているコンパイル結果が自動的に最新のものに代わる。


同じフレームに2つのバッファを表示する事も可能である。 Emacsに「C-x 2」と打てば、Emacsの画面は上下2つの作業領域に分断されるので、 「C-x b」と組み合わせる事により、上の作業領域にXXX、下の作業領域にYYYが表示できる。 「C-x o」とうちこめばカーソルが上の作業領域から下の作業領域に移る(あるいはその逆)ので、XXX、YYYの好きな方が編集できる。 (マウスで上の作業領域から下の作業領域に移る事も可能。) なお、それぞれの作業領域は1975年からウィンドウと呼ばれている。 ただしこの用語は通常のコンピュータ用語のウィンドウとは異なる。 前述したように、通常のコンピュータ用語としてのウィンドウは、フレームに相当する。


「C-x b」により2つのウィンドウ(ないしフレーム)に同じバッファを表示させる事で、同じファイルの別の場所を同時に表示する事が可能になる。 したがって例えば、ファイル(正確にはバッファ)の第一行目を上のウィンドウに表示させっぱなしにし、それを参考にしながら下のウィンドウでファイルの最終行を編集する事が可能である。 これは他のエディタではあまりみかけない、Emacsの便利な特徴である。

ミニバッファ

ふつう最下行にあるミニバッファは、Emacsが情報を受け取る場所である。検索対象のテキストや読んだり保存したりするファイルの名前などの情報をミニバッファに入力する。一部の入力ではタブキーを用いて入力を補完することができる。

アプリケーション実行環境としてのEmacs

Emacs Lispはカスタマイズ言語にとどまらず、フル機能のプログラミング言語である。Emacsの機能の多くはEmacs Lispで書かれている。つまり、Emacsの構造はEmacs Lispの実行機能(と基本的な編集機能)を持ったEmacs Lispインタプリタを中心に、Lispで書かれた多くのコードによって実現されている。たとえば、Emacsは多くのプログラミング言語ごとの編集モードを持っており、自動的に段付けしたり、予約語やコメントに色をつけて表示してくれたり、しかるべく入力を補完してくれたりするのだが、これらの機能はすべてEmacs Lispで書かれている。

このような編集機能にとどまらず、Emacs LispはTCP/IP通信や外部プロセスの起動などの機能を持っており、テキストエディタとしては一般的でない機能も多くEmacs Lispで記述されている。これらの機能を利用した様々なアプリケーションソフトウェアが書かれてきた。メーラーMewmh-eWanderlust、ニュース・メールリーダのGnusWWWブラウザEmacs W3IRCチャットクライアントのrieceirchat、端末エミュレータ (M-x terminal-emulator)、かな漢字変換SKK、Java統合開発環境JDEなどがそれにあたる。Emacsはこれらのアプリケーションソフトウェアを動作させる実行環境となっている。

問題点

Emacsの欠点の一つとして、機能があまりにも多く、対応するLispコードを起動時にローディングする必要があるため、起動に時間がかかるという指摘がなされる(基本的な Lisp 関数群は実行バイナリにあらかじめ事前ロードされて組み込まれている)。マシンパワーの向上によって起動時間が短縮される傾向もあるのだが、新たなより高機能なバージョンが利用されるため、起動時間が短くなっているとの実感がないとされる。これらに対する反論の一つとして、Emacsの持つ機能は文書の編集にとどまらずコンピュータで一般的に行われる多くの操作を行うことができるため、Emacs をいったん立ち上げると一切終了しないような使い方が可能であり、長い起動時間は問題にならないと主張する人もいる。

第二に、ハードルが高いという指摘がある。特にかつてのEmacsはカーソルキーが使えなかったために初心者は戸惑うことが多かった。メニューツールバーもあるが、初心者は使いこなすのが非常に難しい。たとえば、Emacs 上のメーラでの検索操作は、Windows 上の一般的な GUI を使ったメーラであるOutlook Expressでの「大文字小文字を区別する」「日付の範囲指定」といった設定ダイアログを伴う検索操作に比べると圧倒的に難しいといえる。それどころか、いきなり「M-x byte-compile-fileして、」などといったヘルプやREADMEが多く、一体なにをすればいいのか、MキーとXキーを同時押ししても起きない、理解できない、などといった事態が発生しあきらめてしまう人も多い。さらに、Emacsの設定項目はGUIで設定できる項目もあるが、一般的なWindows上の GUI アプリケーションであるFirefoxInternet Explorerの設定ダイアログとくらべて充実しているとは言いがたく、直感的でもなく、設定ファイルを直接編集しなければならない場合も多い。この設定ファイルはEmacs Lispのコードそのものなのであり、設定のためだけにプログラミング言語であるEmacs Lispを習得しなければならない、という状況はエディタを使いたいだけのユーザにとっては許容しがたい。

第三に、エディタとLisp開発環境が融合していて開発しやすいためか、類似した機能を実現した多数の実装が乱立しやすい。特にメーラについては「自分向けのメーラ」的なバリエーションが乱立しており、混乱を招きやすい。

このような問題もあるが、特にLispがわかるプログラマにとっては人気が高いエディタである。上記の問題点は、特にviと比較され、その論争はエディタ戦争と呼ばれるほど頻繁に行われている。

ドキュメントシステム

GNU Emacsのマニュアルは、Emacs自身を以下のように説明している。

Emacs is the extensible, customizable, self-documenting real-time display editor.(Emacs は拡張可能でカスタマイズ可能で、自己ドキュメントを行うリアルタイム表示を行うエディタである)

self-documenting(自己ドキュメントを行う)とあるようにEmacsはそれ自身のドキュメント化に力をおいたエディタである。具体的には以下の特徴を持つ。

  • ドキュメントシステムtexinfoをもつ。texinfoはGNU Emacsの標準ドキュメントシステムであり、Emacsのマニュアルはtexinfoでドキュメント化されている。texinfoはTeXをベースにしたマークアップ言語を使って記述し、ハイパーテキスト的なブラウジング・検索が可能なオンラインドキュメントinfoとして使用することも、TeXを経由して組版されたペーパドキュメントとしても利用することができる。
  • Emacsのキーに割り当てられているすべての操作はLisp関数であるが、そのLispコードのドキュメントコメントからキー操作の説明ドキュメントが生成される。これらのコメント=マニュアルは細粒度のコマンドごとのドキュメントであり、機能とドキュメントの乖離が起きにくくなっている。

脚注

<references/>

外部リンク

Template:Portal

Template:テキストエディタ Template:GNUar:إيماكس bg:Emacs bs:Emacs ca:Emacs cs:Emacs da:Emacs de:Emacs en:Emacs eo:Emacs es:Emacs et:Emacs eu:Emacs fa:ایمکس fi:Emacs fr:Emacs gl:Emacs he:Emacs hu:Emacs ia:Emacs id:Emacs it:Emacs ko:이맥스 ml:ഇമാക്സ്‌ nl:Emacs no:Emacs pl:Emacs pt:Emacs ro:Emacs ru:Emacs simple:GNU Emacs sk:Emacs sv:Emacs th:Emacs tl:GNU Emacs tr:Emacs uk:Emacs vi:Emacs zh:Emacs

個人用ツール