Web Analytics

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Emacs - Wikipedia

Emacs

出典: フリー百科事典『ウィキペディア(Wikipedia)』

あなた宛の新しいメッセージが届いています(差分)。
GUI環境でのGNU Emacs起動時画面
拡大
GUI環境でのGNU Emacs起動時画面

Emacsイーマックス)は vi と並んで、主にUNIXで人気のある、高機能でカスタマイズ性の高いプログラマ向けのテキストエディタである。

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

目次

[編集] 歴史

Emacs の起源はリチャード・ストールマンにより、エディタTECO上のマクロとして開発された。Emacsは Editor MACroS の略である。

後に、Javaで有名なジェームス・ゴスリングの手で Gosling Emacs として書き改められた。このときに LISP(MockLisp と呼ばれる)言語によるカスタマイズ機能、およびエディタ自身の機能を拡張できる機能が含められた。

現在主に使われているのは、リチャード・ストールマンによってゼロから書き直された GNU Emacs とよばれている Emacs である。GNU Emacs も Emacs Lisp とよばれる Lisp をベースにしたカスタマイズ言語を持っている。

[編集] 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 とよぶことがあった。日本ではフォントの扱いや 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 を中心とした主なバリエーションには以下のようなものがある : Nemacs、Epoch、Nepoch、Mule、FSF Emacs (GNU Emacs)、XEmacs、Lucid Emacs、Meadow、NTEmacs

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

[編集] 操作

Emacs のキー操作は、機能の名称をベースにした割り当てを行っており、キーボード上の文字の配置とは関係ない。たとえば、カーソルを上下左右に移動させる操作はそれぞれ C-p, C-n, C-b, C-f に割り当てられている(ここで C-? は Emacs で使われるキー操作の表記で、コントロールキーを押しながら別のキーを押すことをあらわす)が、それぞれ Previous, Next, Back, Forward という英単語の頭文字からきている(キー操作の説明は、C-h t(英語)あるいは C-h T(日本語)で表示させることができそのまま操作方法を学習することができる)。また、vi にある編集モード、カーソル移動モードなどのモードを持たないモードレスな操作モデルを持つ。

これらのすべてのキー操作は前述の Emacs Lisp を使ってカスタマイズ可能である。Emacs 上で vi の操作をエミュレートするエミュレータもいくつかある (vi-mode, viper-mode)。

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

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

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

[編集] Emacs の問題

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

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

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

このような問題もあるが(あるからこそ)、特に Lisp がわかるプログラマにとっては人気が高いエディタである。

[編集] ドキュメントシステム

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 コードのドキュメントコメントからキー操作の説明ドキュメントが生成される。これらのコメント=マニュアルは細粒度のコマンドごとのドキュメントであり、機能とドキュメントの乖離が起きにくくなっている。

[編集] 外部リンク

Static Wikipedia (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia February 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu