コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
Wikippe
検索
検索
表示
ログイン
個人用ツール
ログイン
Emacsのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
Emacs
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
要求した操作を行うことは許可されていません。
このページのソースの閲覧やコピーができます。
{{Infobox_Software | 名称 = Emacs | ロゴ = [[ファイル:EmacsIcon.svg|96px]] | スクリーンショット = [[ファイル:GNU Emacs 23.1.1.png|300px]] | 説明文 =GNU Emacs 23.1.1 | 開発元 = [[GNUプロジェクト]] | 最新版 = 24.3 | 最新版発表日 = {{release date and age|2013|03|11}} | 最新評価版 = | 最新評価版発表日 = | 対応OS = [[クロスプラットフォーム|マルチプラットフォーム]] | 対応プラットフォーム = | 種別 = テキストエディタ | ライセンス = [[GNU General Public License|GPL]] | 公式サイト = [http://www.gnu.org/software/emacs/emacs.html GNU Project] }} '''Emacs'''(イーマックス)とは高機能でカスタマイズ性の高い[[テキストエディタ]]である。スクリーン・エディタとしての人気が高く、特に[[UNIX]]のプログラマを中心としたコンピュータ技術者に愛用者が多い。 == 概要 == [[ガイ・スティール]]、デイブ・ムーン、[[リチャード・グリーンブラット]]、チャールズ・フランクストンらの書いたひと組の {{lang|en|[[Text Editor and Corrector|TECO]]}} マクロ・エディタである {{lang|en|TECMAC}} と {{lang|en|TMACS}} のアイデアに触発され、[[1975年]]に[[リチャード・ストールマン]]がガイ・スティールとともに書いた {{lang|en|TECO}} エディタのエディタ・マクロ ({{lang|en|'''e'''diting '''mac'''ro'''s'''}}) 一式が最初の {{lang|en|EMACS}} である。 その後、何年もの間に多くの {{lang|en|Emacs}} 実装が現れたが、今日よく使われているのはリチャード・ストールマンが[[1984年]]に開発を始め今日に至るまで管理している {{lang|en|GNU Emacs}} と、[[1991年]]に {{lang|en|GNU Emacs}} から[[フォーク (ソフトウェア開発)|フォーク]]した {{lang|en|[[XEmacs]]}} である。 強力な拡張言語である {{lang|en|[[Emacs Lisp]]}} を使うことにより、[[コンピュータ・プログラム]]の[[コンピュータ・プログラミング|編集]]、[[コンパイラ|コンパイル]]から、[[ウェブブラウザ|ウェブの閲覧]]に至るまで様々な仕事をこなすことができる。 取り扱い説明書<ref>{{lang|en|The GNU Emacs Manual}}</ref>では、{{lang|en|Emacs}} 自身を「{{lang|en|the extensible, customizable, self-documenting, real-time display editor}}」(拡張可能でカスタマイズ可能で、自己説明的で、リアルタイム表示を行うエディタ)だと説明している。 大文字で始まる「{{lang|en|Emacs}}」と、小文字の「{{lang|en|emacs}}」を区別する人もいる。 大文字で始まる「{{lang|en|Emacs}}」は、リチャード・ストールマンの作ったエディタから派生したエディタ(特に {{lang|en|GNU Emacs}}、{{lang|en|XEmacs}})を指し、小文字の「{{lang|en|emacs}}」は、たくさんある個別の {{lang|en|emacs}} 実装を指す。 雄牛を意味する英語「{{lang|en|ox}}」の複数形「{{lang|en|oxen}}」からの類推で、「{{lang|en|emacs}}」という英語の複数形は「{{lang|en|emacsen}}」とつづられる。たとえば、[[Debian]]の互換 Emacs パッケージは、<code>emacsen-common</code>となっている。 コリンズ英語辞典<ref>{{lang|en|Collins English Dictionary}}</ref>には、{{lang|en|emacsen}} という複数形だけが掲出されている。[[Microsoft Windows|Windows]]用アプリケーションである[[NTEmacs]]、[[Meadow]]なども {{lang|en|emacsen}} に含まれる <!-- ref>{{cite newsgroup | title = "Emacs" defined in Collins English Dictionary | author = Thomas Widmann | date = 2005-06-13 | newsgroup = comp.emacs | id = 1118681561.957194.160950@z14g2000cwz.googlegroups.com | url = http://groups.google.com/group/comp.emacs/msg/23791b9653685c08 | accessdate = 2006-09-27 }}</ref -->。 [[Unix]]文化において、{{lang|en|Emacs}} と {{lang|en|[[vi]]}} はともに伝統的な[[エディタ戦争]]における双璧をなしている。 {{lang|en|Emacs}} はエディタの範疇を超え、テキスト処理のための包括的作業台、あるいは[[アプリケーションソフトウェア]]実行環境であるといえる。{{lang|en|Emacs}} は長い歴史を持っており、初めからの書き直しを含む改良を重ね、多くの派生エディタを生み、現在に至っている。現在主流の {{lang|en|GNU Emacs}} の開発はもともとは[[UNIX]]環境とVAX/[[OpenVMS|VMS]]を主なターゲットとしていたが、各種の[[オペレーティングシステム|OS]]への移植もなされてきており、[[OS X]]、[[Microsoft Windows|Windows]]など多くの環境で利用することができる。 == 歴史 == Emacsは、[[1970年代]]の[[MIT人工知能研究所]](MIT AI研)で産声をあげた。 AI研の[[PDP-6]]や[[PDP-10]]の[[オペレーティングシステム]]だった[[Incompatible Timesharing System]] (ITS) への導入前の既定エディタは、[[Text Editor and Corrector|TECO]]という[[ラインエディタ]]だった。 現在の一般的なテキストエディタとは違い、TECOには入力・編集・表示用の別々のモードがあり、文字を入力しても即座に表示されるわけではなかった。 編集されたテキストが画面に表示されていないとき、意図した文字が挿入されるよう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で<nowiki><e></nowiki>が略称に使われていなかったから」である。 また、[[ボストン]]の人気アイスクリーム屋「{{仮リンク|Emack & Bolio's|en|Emack & Bolio's}}」の店がMITから徒歩圏内にあったからとも言われている。 その店によく通っていた[[Dave Moon]]はその後、ITSで使われたテキスト整形プログラムをBOLIOと名づけた。 このことは、{{仮リンク|ハッカー公案|en|Hacker koan}} の[[Hacker koan#Emacs and Bolio|''Emacs and Bolio'']]の素となっている。 過度のカスタム化や事実上の分裂の危険に気づいたストールマンは、とある使用上の条件をつけた。 彼は後に次のような文章を残している。 <blockquote>''「EMACSは、共同参加を基として頒布される。つまり、改良点はすべて、組み入れて頒布するために、私のところへ戻ってこなければならない」''</blockquote> オリジナルのEmacsはTECO同様、PDPだけで動いた。 その動きはTECOと大きく異なっていた。 そして、急激にITS上の標準編集プログラムとなった。 当初、Michael McMahonによりITSから、Unixにではなく、[[TOPS-20|Tenex]]や[[TOPS-20]]オペレーティングシステムに[[移植 (ソフトウェア)|移植]]された。 初期のEmacsへの貢献者には、このほか[[Kent Pitman]]、[[Earl Killian]]、[[Eugene Ciccarelli]]らがいる。 === 他のemacsたち === その後、他のコンピュータ・システム用に、多くのEmacs風エディタが書かれた。 [[1976年]]前後からMichael McMahonとDaniel Weinrebらが、 EINE ("Eine Is Not Emacs") 、 ZWEI ("Zwei Was Eine Initally"、[[LISPマシン|Lispマシン]]用) を書き(なお、ZWEIは[[ドイツ語]]で「2」の意味でもある。EINEが「1つの」(女性形)にあたるためのもじり。ストールマンの呼ぶEINEは「アイン」のように聞こえるが、ドイツ語の発音は「アイネ」に近い)、 Owen Theodore Andersonにより、SINE ("Sine Is Not Emacs") が書かれた。 Daniel WeinrebのEINEは、Lispマシン上の実装で、Lispで書かれた最初のEmacsであり、ユーザー自身がLispを用いて拡張できる。 [[1978年]]、[[Bernard Greenberg]]は、[[ハネウェル]]のケンブリッジ情報システム研で、[[Multics Emacs]]を書いた。 [[Unix]]で動いた最初のEmacs風エディタは、後に[[NeWS]]や[[Java]]の開発で知られることになる[[ジェームス・ゴスリング]]が1981年に書いた[[Gosling Emacs]]だった。 これは[[C言語|C]]で書いてあり、[[Mocklisp]]なる[[LISP|Lisp]]風構文の拡張言語を使っていた。 Mocklispにはシンボルさえなく<ref>[http://www.gnu.org/philosophy/stallman-kth.ja.html RMS Lecture at KTH: Japanese]</ref>、構文がLisp風なだけで、本当のLispではない。現在広く使われている[[フリーソフトウェア]]である[[GNU Emacs]]や[[Meadow]]と異なり、Gosling Emacsは[[プロプライエタリ・ソフトウェア]]であった。プロプライエタリ・ソフトウェアとは、ソースコードが公開されていないソフトウェアで、プログラムを自由に配布や改変、逆コンパイルをすることができないものを指す用語である。 === GNU Emacs === 1984年、Gosling Emacsの[[フリーソフトウェア]]版をつくるべく、ストールマンはGNU Emacsに取り組み始めた。 当初は、Gosling Emacsを基にしていたのだが、ストールマンはMocklisp[[インタプリタ]]を本物のLispインタプリタに入れ替えてしまい、ほぼすべてのコードが入れ替わった。 これは、揺籃期の[[GNU|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 のバージョンは 1985年のうちに 17 まであがったが、それ以降は更新は落ち着いた速度で行われている。 {| class="wikitable" |- ! バージョン || リリース年 || 主要な更新 |- | 18.41 || 1987 || |- | 19.28 || 1994 || フレームのサポート、色・フォントが変更可能に |- | 20 || 1997 || Mule の取り込み、カスタマイズ機能 |- | 21 || 2001 || GUIの大幅な変更、ツールバー |- | 22 || 2007 || Cygwin、OS X (Carbon) 対応。多くのモードを標準で装備。 |- | 23 || 2009 || TrueType などのフォントに対応。内部UTF-8化。OS X (Cocoa) 対応。 |- | 24 || 2012 || パッケージ管理、テーマ、BIDIサポート、Lisp の静的スコープ。 |} ''[[伽藍とバザール]]''で「伽藍」式開発の例にあげられていたように、GNU Emacsの開発は、[[1999年]]まで比較的閉鎖的だった。 それ以降、公開の開発[[メーリングリスト]]で議論がなされるようになった。 [[バージョン管理システム]]は[[1993年]]より匿名[[Concurrent Versions System|CVS]]アクセスを採用していたが、[[2009年]]末より[[Bazaar]]に切り替えられた。 管理者は長らく[[リチャード・ストールマン]]が務めていたが、[[2008年]]からStephan MonnierとChong Yidongに引き継がれている。 === XEmacs === [[ファイル:X_Emacs_Vm-2.png|thumb|XEmacsでVM(メールリーダー)を用いてメールを表示している画面。]] 初期の GNU Emacs は GUI への対応が貧弱であった。Epoch は GNU Emacs バージョン18を基にして[[X Window System]]の[[マウス (コンピュータ)|マウス]]や複数ウィンドウ(フレーム)機能に拡張を施したものである。 1991年初頭、GNU Emacs 19の初期α版を基に、{{仮リンク|Jamie Zawinski|en|Jamie Zawinski}}と{{仮リンク|Lucid Inc.|en|Lucid Inc.}}の人たちによりLucid Emacsが開発された。 コードベースはすぐに分割し、開発チームは、単一プログラムとして併合しようとするのをあきらめた<ref>{{cite web | last = Stephen J. | first = Turnbull | title = XEmacs vs. GNU Emacs | url = http://www.xemacs.org/About/XEmacsVsGNUemacs.html | accessdate = 2006-09-27 }}</ref>。 これは、[[フォーク (ソフトウェア開発)|フォーク]] した [[フリーソフトウェア]]・プログラムのうち初期の最も有名な例である。 Lucid Emacsは[[XEmacs]]と名前を変えた。 XEmacs の「X」は、[[グラフィカルユーザインタフェース]]としての[[X Window System]]に当てた初期の中心点からか、XEmacs開発者たちの妥協の産物として「大賛成というほどではない」 (less than favorable) 名前からきている [http://www.xemacs.org/Documentation/21.5/html/internals_3.html#SEC11]。 GNU EmacsとXEmacsの両方とも、テキスト[[端末]]と、グラフィカルユーザインタフェースの両方をサポートしている。 XEmacs はかつて GNU Emacs と並んで人気があったが、バージョンが 21 のまま2009年以来開発が止まっている。 === その他の実装 === GNU Emacsは当初、当時の[[ハイエンド]]であった、32ビットのフラット[[アドレス空間]]、1 [[メビバイト|MiB]]の[[Random Access Memory|RAM]]をもつコンピュータを想定していた。 このため、小さな再実装への道がひらかれた。 そのうちきわだつものは、以下のとおり。 ; {{仮リンク|MicroEMACS|en|MicroEMACS}} : Dave Conroyが初めに書き、後にDaniel Lawrenceが開発した、非常に可搬性のある実装である。[[リーナス・トーバルズ]]の使うエディタ<ref>http://www.stifflog.com/2006/10/16/stiff-asks-great-programmers-answer/</ref> ;{{仮リンク|Mg (エディター)|en|mg (editor)}} : 当初MicroGNUEmacsといわれていて、キーバインドが若干GNU Emacsに似ているMicroEMACSのフォーク。[[OpenBSD]]では既定でインストールされる ; JOVE (Jonathan's Own Version of Emacs) : Jonathan Payneによる[[Unix系|UNIX風]]システム用の非プログラマブルなEmacs実装 ; {{仮リンク|Freemacs|en|Freemacs}} : テキスト・マクロ拡張を基本にした拡張言語をもちつつ、オリジナルのセグメント内に収めるための64 [[キビバイト|KiB]]メモリ制限を満たした[[DOS (OS)|DOS]]版 Emacsライク(Emacs風)なエディタとなるとさらに多いが、[[マクロ言語]]として[[Common Lisp]]系のxyzzy Lispを実装した[[xyzzy]]、{{仮リンク|S-Lang|en|S-Lang (programming library)}}ベースの{{仮リンク|JED|en|JED (text editor)}}、かつて MS-DOS 時代にプログラマ用エディタとして人気のあった {{仮リンク|Epsilon|en|Epsilon (text editor)}}などがある。 == ライセンス == <!-- This needs to be phrased somewhat better, the GPL does not cover examination or modification, since its terms only cover re-distribution --> 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''であることも宣言している。 GNU Emacs(や他のGNUパッケージ一般)では、[[コピーレフト]]の強制を容易にするため、すなわちFSFが係争に入ったときに法廷でソフトウェアを守れるようにするため、著しい量のコード寄贈は[[著作権]]者が自身の著作権を適切に放棄または委譲したときだけ受理する方針になっている。 この方針の唯一の例外は[[Mule]](MULtilingual Extension、[[Unicode]]や、他の言語の用字系を処理する高度なメソッドがある)のコードで、著作権者が日本国政府で著作権の委譲が不可能であった<ref>http://mail.gnu.org/archive/html/bug-gnu-emacs/2000-09/msg00065.html</ref> 。 些細なコード寄贈やバグ修正には、この方針は適用されない。 些細かどうかの厳密な定義はないが、指針として10行未満のコードは些細とみなされている。 この強制は、GNU Emacsの[[フリーソフトウェア・ライセンス]]、つまり[[GNU General Public License]]と、多くの著作者と寄贈者による知的著作物であるフリーソフトウェア自体に、法的な信頼性をあたえている。 == 機能 == 以下は、今日広く使われているEmacs実装である最近のEmacs、すなわちGNU EmacsとXEmacsについて記述する。 GNU Emacsからのフォークとして始まったXEmacsとその後継版は、GNU Emacsとおおむね互換性がある。 vi が編集のための基本的な機能のみを搭載していたのに対し、Emacs はインクリメンタルサーチ・無制限のアンドゥ・ヤンク(ペースト)用の[[スタック]]・複数のバッファ・バッファ上でシェルを実行・補完・言語ごとのモードなど、エディタとして考えられる限りの機能を詰め込んでいる。[[vim]]ではEmacsと同等のことができるようになっているが、バッファの使い方はEmacsより控えめである。 === プラットフォーム === Emacsは数多くの[[プラットフォーム (コンピューティング)|プラットフォーム]]に[[移植 (ソフトウェア)|移植]]されている。[[Unix]]風システム([[Linux]]、各種[[BSD]]、[[Solaris]]、[[AIX]]、[[IRIX]]、[[OS X]]など)、[[MS-DOS]]、[[Microsoft Windows]]、[[OpenVMS]]を含む、幅広い[[オペレーティングシステム]]で動く。フリーであるか独占的であるかに関わらず、Unixシステムの多くにEmacsが同梱されている。 Emacsは[[端末|文字端末]]のみならず[[グラフィカルユーザインターフェース|GUI]]環境でも動作する。[[Unix]]風システムでは、[[Motif (GUI)|Motif]]、[[LessTif]]、[[GTK+]]といった[[ウィジェット・ツールキット]]、および直接[[X Window System]]を利用してGUIを提供している。また、 OS Xの[[Carbon]]・[[Cocoa]]インターフェース、Microsoft Windowsの[[Graphics Device Interface|GDI]]を使う実装もある。これらのGUI環境では、[[メニュー (コンピュータ)|メニューバー]]、[[ツールバー]]、[[スクロールバー]]、[[コンテキストメニュー]] などが利用可能である。 === 基本的な操作 === カーソル移動などは矢印キーをつかって行うこともできるが、主要な大部分の操作は、[[コントロールキー|Controlキー]]・[[メタキー|Metaキー]](Windows では通常[[Altキー]]を使用する)・Superキーなどを押し下げたまま別のキーを打鍵することで行うことができる。[[vi]]と比較した場合、[[vi]]が編集モード、カーソル移動モードの2つのモードを持つのに対し、Emacsはそのようなモードを持たない。ただしEmacs上で[[vi]]の操作をエミュレートするエミュレータもいくつかある (vip-mode, viper-mode) 。 なお、EmacsではControlキーを押しながら「a」を押す事を「C-a」と表記し、Metaキーを押しながら「a」を押す事を「M-a」と表記する。本稿でも以下この表記を用いる。 キーの多くは英語の頭文字にしたがって割り振られているので、どのキーがどの操作に対応しているのかを比較的簡単に覚えることができる。たとえばカーソルを右、左、上、下に動かす操作はそれぞれC-f、C-b、C-p、C-nであるが、これはそれぞれforward、backward、previous、nextの略である。 Emacsでは、2ストローク以上のキー操作も多数用意している。たとえば「C-xC-s」(=Controlを押し下げたままx、sと打鍵する)でファイルを保存する。キーの割り当てられていないコマンドも多くあり、それらは M-x を押してからコマンドを入力することで実行する。 なお、C-h t(英語)あるいはC-h T(翻訳)でチュートリアルを表示させることができ、そのまま操作方法を学習することができる。 グラフィカル・インターフェースでEmacsを使っているとき、キーボードの代わりにメニューバーやツールバーからもコマンドを呼び出せる。しかし、経験豊富なEmacsの利用者には、必要なキー操作をいったん記憶してしまえばより速く操作でき便利なキーボードからのコマンド呼び出しのほうが好まれている。 全ての編集コマンドは、実際はEmacs Lisp環境の関数を呼び出す。文字''a''を挿入するコマンドの<code>a</code>をたたいただけでも、関数を(この場合<code>self-insert-command</code>を)呼び出す。一部のEmacsコマンドは、外部プログラム(つづりのチェックに[[ispell]]や、プログラムのコンパイルに[[GNUコンパイラコレクション|gcc]])を呼び出し、プログラムの出力を解析し、Emacsに結果を表示することで、機能している。 === バッファとフレーム === Emacsでは、複数のファイルを切り換えながら編集したり、同じファイルの別の箇所を同時に表示したりする事が可能である。 このような作業の為にEmacsは、バッファ、ウィンドウ、フレームという仕組みを用意している。 '''バッファ'''は、直観的には「Emacsに読み込まれたファイル」だと思えばほぼ正しいが、それ以外にも様々なメッセージを表示する為のバッファやスクラッチ用のバッファもある。バッファはかならずしも画面上に表示されているとは限らず、どのバッファを画面に表示するかを切り替えることができる。 画面を複数の'''ウィンドウ'''に分割して、それぞれに同じまたは異なるバッファの内容を表示することができる。 '''フレーム'''は、通常のコンピュータ用語でいうウィンドウに相当する。やはり同じまたは異なるバッファの内容を表示することができる。 ウィンドウやフレームの機能により、例えばあるフレームでプログラムの[[ソースコード]]を表示しつつ別のフレームでそのプログラムのコンパイル結果を表示する事ができる。 === ミニバッファ === ふつう最下行にある''ミニバッファ''は、Emacsが情報を受け取る場所である。検索対象のテキストや読んだり保存したりするファイルの名前などの情報をミニバッファに入力する。一部の入力ではタブキーを用いて入力を補完することができる。ミニバッファは通常1行しかないが、ここでも通常のバッファと同じ移動・編集コマンドを使うことができる。 === 編集モード === 「主モード(メジャーモード、major-mode)」という編集モードにEmacsが入ることで、編集するテキストの種類に応じて振舞いを適応させる。 普通のテキスト・ファイル、多くの[[プログラミング言語]]の[[ソースコード]]、[[HyperText Markup Language|HTML]]文書、[[TeX]]や[[LaTeX]]の文書や、多くの他種のテキスト用に主モードが定義されている。 各主モードはEmacs Lisp変数を調節するなどして固有の型のテキストに都合よく振る舞うように作られている。 特に、[[キーワード]]や[[コメント]]などの表示にさまざまな書体や色を用いた[[シンタックスハイライト|構文の強調]]をしばしば実装する。 主モードは、専用の編集コマンドも提供する。たとえばプログラミング言語用の主モードはしばしば、関数の先頭や末尾へ飛ぶコマンドを定義する。 ファイルを16進で表示してバイナリ編集できる hexl-mode などの特殊なモードもある。 「副モード(マイナーモード、minor-mode)」でEmacsの振舞をもっとカスタム化することもできる。 たとえば、Cプログラミング言語の主モードは、人気の[[字下げスタイル]]それぞれにさまざまな副モードを定義している。 主モードは2つ以上同時に使用できないが、副モードは同時に複数を有効にできる。 === 説明文字列 === Emacsには最初から、各個別のコマンド、変数、内部関数の説明文字列を表示する強力な''help''ライブラリーがついてきた。 この機能のため、Emacsは「自己説明的」といわれる 各関数には、説明文字列が含まれていて、具体的には必要に応じ利用者に表示される。 その後、関数に説明文字列をつける習慣は、[[LISP|Lisp]]や[[Java]]といったさまざまなプログラミング言語に広まった。 Emacsの''help''体系は、ソースコードへのリンクがついているため、組込みのライブラリーであってもインストールされた第三者のライブラリーのEmacs Lispソースコードであっても、''help''を使って閲覧することができる。 組込みの説明文字列のほかにも、リチャード・ストールマンの執筆した''GNU Emacs Manual''の電子コピーがGNU Emacsについており、組込みの[[Texinfo|Info]]ブラウザで閲覧することができる。 XEmacsの場合、ソフトウェア本体と同時にGNU Emacs Manualからフォークした同様のマニュアルがある他、Bill Lewis、リチャード・ストールマン、Dan Laliberte共著の''Emacs Lisp Reference Manual''、Robert Chassel著の''Programming in Emacs Lisp''も含まれている。 電子版のほかに、3種のマニュアルが[[フリーソフトウェア財団]]から書籍のかたちで刊行されている。 Emacsには組込みの[[チュートリアル]]もある。 編集するファイル抜きでEmacsを立上げると、簡単な編集コマンドとチュートリアルの呼出し方の説明が、表示される。 * [[texinfo]]はGNU Emacsの標準ドキュメントシステムであり、Emacsのマニュアルはtexinfoでドキュメント化されている。texinfoは[[TeX]]をベースにしたマークアップ言語を使って記述し、ハイパーテキスト的なブラウジング・検索が可能なオンラインドキュメント[[info]]として使用することも、TeXを経由して組版されたペーパドキュメントとしても利用することができる。 == 国際化 == Emacsの[[日本語]]版としてNemacs (Nihongo Emacs) が、多国語対応版として[[Mule]] (MULtilingual Enhancement to GNU Emacs) が開発された。NemacsおよびMuleは電子技術総合研究所(電総研:現在の[[産業技術総合研究所]])の[[半田剣一]]らによるものである。 === Mule === Muleは[[アラビア文字]]などの右から左へ記述する文字をふくめた複数の文字集合の1ファイル中での混在と編集が可能であり、中国や、タイ等多くの国や地域で規格化された文字集合をサポートするなど、先進的かつ実用的な多用字系処理系であった(しばしば[[多言語]]処理系ともいわれる)。 === 日本語 GNU Emacs === 日本語 GNU Emacs (Nemacs:Nihongo Emacs) は[[東京大学]]の[[平野聡]]と[[大阪大学]]の[[東田学]]によって、フリーな[[DOSエクステンダ]]のgo32/djgppを用いて[[MS-DOS]]上に移植され(後に emx にも対応)、demacsと呼ばれた。 === 国際化の現状 === GNU Emacs 21 より Mule のコードが取り込まれており、多数の[[自然言語]]で書かれているテキストの編集をサポートしている。多種のアルファベット、用字系 (script) 、書写体系 (writing system) 、文化慣習のサポートがある。 [[ispell]]といった外部プログラムを呼び出すことで、多数の言語のつづりをチェックできる。 [[UTF-8]]を含む多数の[[文字コード|符号化体系]]をサポートしている。 XEmacs 21.4版と21.5版には、部分的なUnicodeのサポートが含まれている。 内部的にはEmacs固有の符号化を用いていたが、上記の半田剣一らの努力により、Emacs 23 では内部で UTF-8 を使うようになり、さらに[[基本多言語面]]以外の文字も使えるようになった。また、Emacs 24 では左から右へ書く文字と右から左へ書く文字を混在して書くことができるようになった。 Emacsのユーザー・インターフェースは英語で、初心者用チュートリアルを除き、他の言語に翻訳されたことはない。 視力障害や全盲の利用者のため、音声フィードバックだけでエディタを使えるようになる''[[Emacspeak]]''という下位システムがある。 == GUIへの対応 == Emacsはもとは文字端末での利用を前提に設計されていたものであるが、少なくともGNU Emacsバージョン18では[[X Window System]]アプリケーションとしてコンパイルすることもできた。しかし、その実装方法は、自前の[[端末エミュレータ]]を立ち上げ、その中で動くというものであり、ウィンドウシステムの持つ機能を十分に発揮するには至っていなかった。このため XEmacs などのプロジェクトが生まれたが、GNU Emacs 自身も徐々にGUIに対応していった。 Emacsバージョン21およびXEmacsではグラフィックス機能が強化されており、1バッファ中で複数のサイズやスタイルのフォントを混在させることもできる。また、画像を表示させることもでき、[[ImageMagick]]と連携してさまざまな画像ファイルを開くことができるようになった。 2009年の Emacs 23 ではフォントの扱いが大きく変わり、[[TrueType]]フォントが自由に使えるようになった。 === Windowsへの移植 === Win32 で動く Emacs を NTEmacsとよぶこともある。 現在はGNU Emacs自体を[[Microsoft Visual C++|Visual C++]]または[[Cygwin]]でコンパイルすることが可能である<ref>[https://www.gnu.org/software/emacs/manual/html_mono/efaq-w32.html#Compiling GNU Emacs FAQ for MS Windows]</ref>。バイナリ形式でも配布されているので、zipを展開するだけでWindows上でEmacsが使用可能である<ref>http://ftp.gnu.org/gnu/emacs/windows/</ref>。 日本では、かつて宮下尚によりWin32アプリケーションとしてMule 2.3をベースにした[[Mule|Mule for Win32]]、そしてEmacs 20をベースにした[[Meadow]]が、Windows上に移植・開発され、広く使われていた。2004年7月7日にはGNU Emacs 21をベースにしたMeadow2がリリースされたが、Emacs 22 以降には対応していない。一方、上記のバイナリは[[日本語入力システム|日本語IME]]からの入力に問題があるため、パッチをあててCygwinでビルドしたgnupack<ref>http://en.sourceforge.jp/projects/gnupack/</ref>が使われるようになってきている。 [[SKK]]のようなEmacs上の入力システムを使い、Windows上の日本語IMEを使用しない場合は、公式のバイナリをそのまま使えばよい。 === OS Xへの移植 === [[OS X]] は最初から Emacs がインストール済みだが、標準ではGUIが使えない。銭谷誠司が Emacs 22 を OS X の [[Carbon]] API を使って GUI 対応した Carbon Emacs が使われてきたが、Emacs 23 からは GNU Emacs そのものが [[Cocoa]] API を使った GUI で動くようになり、configure に <code>--with-ns</code> (ns は [[NEXTSTEP]])オプションをつけるだけで GUI で動く Emacs をソースからビルドすることもできる。 OS X では、コントロールキーのほかに[[コマンドキー]]と[[オプションキー]]が用意されており、そのどちらかをMetaキー・もう片方をSuperキーとして使うことができる。Superキーの割り当ての一部は OS X の標準のキー割り当てとよく似ている(s-x でカット・s-c でコピー・s-n で新しいフレームが開くなど)。ただし、その副作用として本来のオプションキーとしての機能は使えなくなってしまう。たとえば日本語キーボードでは[[バックスラッシュ]]をオプション+円記号で入力する必要があるので、特別な対応が必要となる。 == アプリケーション実行環境としてのEmacs == Emacsの利用者は、自分のニーズに合わせるためにエディタをカスタム化することができる。 Emacsをカスタム化する方法は大きく3つある。 第一は''customize''拡張で、GUIを使って通常のカスタム化変数を利用者が設定できる。 第二は一連のキー操作を記録して入り組んだ繰返しの仕事を自動化するよう再生することである。これを[[マクロ言語|マクロ]]と呼ぶ。 マクロは保存して必要時に呼び出すこともできるが、その場限りの使い捨てであることが多い。 第三はEmacs Lispを使ったEmacsのカスタム化である。 利用者用のEmacs Lispコードは、Emacsの立上げ時に読み込まれる<code>.emacs.el</code>というファイル(以前は <code>.emacs</code> という名前だった)に保存する。<code>.emacs.el</code>ファイルは、変数や既定とは違う[[キーの結び付き]]を設定したり、利用者が便利と思ったコマンドを新しく定義したりするのに用いる。Emacsの既定の振舞からかけ離れた風変わりなカスタム化をする場合、数百行に及ぶこともある。 [[Emacs Lisp]]はカスタマイズ言語にとどまらず、フル機能の[[プログラミング言語]]である。Emacsの機能の多くはEmacs Lispで書かれている。つまり、Emacsの構造はEmacs Lispの実行機能(と基本的な編集機能)を持ったEmacs Lisp[[インタプリタ]]を中心に、Lispで書かれた多くのコードによって実現されている。たとえば、Emacsは多くのプログラミング言語ごとの編集モードを持っており、自動的に段付けしたり、予約語やコメントに色をつけて表示してくれたり、しかるべく入力を補完してくれたりするのだが、これらの機能はすべてEmacs Lispで書かれている。 Emacsは、プログラマが単一インターフェースでコードを編集、[[コンパイル]]、[[デバッグ]]するような[[統合開発環境]] (IDE) としても使うことができる。 このような編集機能にとどまらず、Emacs Lispは[[インターネット・プロトコル・スイート|TCP/IP通信]]や外部[[プロセス]]の起動などの機能を持っており、テキストエディタとしては一般的でない機能も多くEmacs Lispで記述されている。これらの機能を利用した様々な[[アプリケーションソフトウェア]]が書かれてきた。Emacsはこれらのアプリケーションソフトウェアを動作させる実行環境となっている。 その他様々な機能を持つライブラリーが存在する。 * Dired: ファイルマネージャ * Ediff: [[差分]]ファイルを渡り歩く * Emerge: ファイルの比較と結合 * VC: [[バージョン管理システム]] * Calc: 数値[[計算機]] * [[Texinfo|Info]]: [[オンラインヘルプ]] * Calendar-mode: 予定表と日記 * JDE: Java[[統合開発環境]] * [[:en:Wikipedia:Wikipedia-mode.el|wikipedia-mode]]: Wikipediaの記事を編集する * [[SKK]]: [[かな漢字変換]] * Emacs W3: [[ウェブブラウザ]] * ERC: [[Internet Relay Chat|IRC]]クライアント * Twittering-mode: [[Twitter|ツイッター]]のクライアント * [[Mew]]、[[mh-e]]、[[Wanderlust]]: [[電子メールクライアント]] * [[Gnus]]: フル装備の[[ニュースリーダー]]兼[[電子メールクライアント]] * Emacs-wiki: Emacsを使ったLispベースのwikiソフトウェア * Planner: Emacsを使った[[PIM|個人情報管理]] * Doctor: [[ELIZA]] 風の自動会話プログラム * Tetris: [[テトリス]] * Pong: [[ポン (ゲーム)|ポン]] * [[Dunnet]]: [[アドベンチャーゲーム#テキストアドベンチャー|テキスト・アドベンチャー]] ライブラリーは、インターネットで見付けることができる。 新しいライブラリーを投稿するための[[ネットニュース|Usenet]][[ニュースグループ]][news://gnu.emacs.sources gnu.emacs.sources]まである。一部のライブラリーは、最終的にEmacsに取り込まれて、「標準」ライブラリーとなる。 Emacs 24 では、パッケージマネージャが内蔵された。公式のパッケージアーカイブである GNU ELPA(Emacs Lisp Package Archive)<ref>https://elpa.gnu.org/packages/</ref>のほか、いくつかのアーカイブを扱うことができる。 == 問題点 == {{独自研究|section=1|date=2011年5月}} * [[vi]] などにくらべて起動が遅い。ただし、Emacsは立ちあげっぱなしにしておく使い方をすることが可能であり、長い起動時間は問題にならないいう反論もある。 * Emacsではファイラもオプションの設定画面も通常のエディタ画面と同じ操作が可能であるという特徴があるが、ダイアログボックスなどを使ったGUIに慣れたユーザーにとって、このようなUIはなじみにくい。 * カスタマイズ可能な機能の数が極端に多く、何を設定したらいいのかわかりづらい。 * Emacs Lisp により拡張機能が作りやすいため、類似した機能を実現した多数の実装が乱立しやすい。 === Emacs小指 === Emacsは、修飾キー、特に[[小指]]で押されるControlキーに依存しているため、重度のEmacs利用者は小指に痛みをおぼえることがある (cf [[repetitive strain injury]], [[fat-finger]])。 これは俗に「Emacs小指」と称され、[[vi]]の主唱者がviに切り替えた理由としてしばしば引合いに出される。 これを緩和するため、多くのEmacs利用者は左のControlキーとCapsLockキーを交換したり、両方をControlキーに定義したりする。修飾キーを[[親指]]で簡単に押せる位置に移動して痛みをやわらげる[[Kinesis#Contoured Keyboard|Kinesis Contoured Keyboard]]や、手の平で押せるようキーボードの両側に大きな修飾キーを移動した[[Microsoft Naturalキーボード]]がある。 === 起動の遅さ === 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は最近のワードプロセッサよりも素速く立ち上がる。 さらに、GNU Emacs 23 以降はEmacsをサーバープログラムとして立ち上げておく[[デーモン (ソフトウェア)|デーモン]]モードが追加された。この場合、Emacs本体はOS起動時に自動的に一度起動するだけなので、速度は問題にならない。 == 脚注 == <references/> == 外部リンク == {{Portal|FLOSS|[[ファイル:FLOSS_logo.png|41px]]}} * [http://www.gnu.org/software/emacs/emacs.html GNU Emacs 公式サイト] * [http://savannah.gnu.org/projects/emacs/ emacs] [[GNU Savannah]](サバンナ) * [http://www.sociono.net/session-ida/short-bio.html 井田昌之]による[[ビット (曖昧さ回避)|BIT誌]]上の連載「Emacs解剖学」([[Internet Archive]]のキャッシュ) ** [http://web.archive.org/web/20041210205259/http://www.sipeb.aoyama.ac.jp/~ida/books/gnu_rms.html GNUの誕生] ** [http://web.archive.org/web/20041210210448/http://www.sipeb.aoyama.ac.jp/~ida/books/teco.html TecoとEmacs] ** [http://web.archive.org/web/20041125085658/http://www.sipeb.aoyama.ac.jp/~ida/books/emacs-and-keyboard.html Emacsとkeyboard] ** [http://web.archive.org/web/20041213185802/http://www.sipeb.aoyama.ac.jp/~ida/books/keyboard2.html (続)keyboard] ** [http://web.archive.org/web/20041211111627/http://www.sipeb.aoyama.ac.jp/~ida/books/gosling.html Gosling Emacs] ** [http://web.archive.org/web/20041125182250/http://www.sipeb.aoyama.ac.jp/~ida/books/multics-emacs.html Multics Emacs] ** [http://web.archive.org/web/20041216123818/http://www.sipeb.aoyama.ac.jp/~ida/books/source.html ソースで遊ぼう] ** [http://web.archive.org/web/20041211105551/http://www.sipeb.aoyama.ac.jp/~ida/books/completion.html 入力の補完] * [http://www.emacswiki.org/ EmacsWiki] – Emacsの文書化や議論専用のコミュニティー・サイト * [http://www.finseth.com/emacs.html Emacsの実装一覧(Emacs Inplemantation)] * [http://www.linux.or.jp/JF/JFdocs/Emacs-Beginner-HOWTO.txt 初心者向け HowTo] * [http://cgi.netlaputa.ne.jp/~kose/LinuxWorld/ プログラマ向け HowTo] {{テキストエディタ}} {{GNU}} {{DEFAULTSORT:いいまつくす}} [[Category:オープンソース]] [[Category:テキストエディタ]] [[Category:GNUプロジェクト]] [[Category:UNIXのソフトウェア]]
このページで使用されているテンプレート:
テンプレート:Cite web
(
ソースを閲覧
)
テンプレート:GNU
(
ソースを閲覧
)
テンプレート:Infobox Software
(
ソースを閲覧
)
テンプレート:Lang
(
ソースを閲覧
)
テンプレート:Portal
(
ソースを閲覧
)
テンプレート:テキストエディタ
(
ソースを閲覧
)
テンプレート:仮リンク
(
ソースを閲覧
)
テンプレート:独自研究
(
ソースを閲覧
)
Emacs
に戻る。
検索
検索
Emacsのソースを表示
話題を追加