GNU
Emacsは、リチャード・ストールマンが開発した
テキストエディタで、高度な拡張性とカスタマイズ性を誇ります。
Emacs Lispという
プログラミング[[言語]]を用いて機能を拡張できる点が最大の特徴で、単なる
テキストエディタを超えた、強力な開発環境としても利用されています。その柔軟性から「今日利用できる最もパワフルな
テキストエディタ」と評されることもあります。
歴史
1976年にストールマンが最初の
Emacsを開発し、1984年にGNU
Emacsの開発が始まりました。当初は別の
Emacsエディタをベースとしていましたが、ストールマンがLISP
インタプリタを実装したことで大幅な書き換えが行われました。GNU
Emacsは
GNUプロジェクト初期の主要なプログラムであり、自由ソフトウェア運動の象徴としても重要な役割を担ってきました。
1985年に最初の公式リリースがあり、その後も
機能拡張と改良が続けられています。開発初期にはCVSで管理されていましたが、現在はgitが利用されています。ストールマンは長らくメンテナを務めていましたが、現在は複数の開発者がメンテナンスを引き継いでいます。
GNU
Emacsの
ソースコードは
GNU General Public License (GPL) の下で公開されており、誰でも自由に利用、修正、再配布できます。古いバージョンのドキュメントは独自の
ライセンスで配布されていましたが、現在は
GNU Free Documentation Licenseが適用されています。
コピーレフトを徹底するため、コード寄贈には
著作権の放棄または委譲が求められますが、例外もあります。
基本的な使い方
Emacsはキーボード操作を主体としており、コントロールキーやメタキーなどと組み合わせて様々なコマンドを実行します。カーソル移動やテキスト編集の基本的な操作から、ファイル操作、プログラミング支援まで、幅広い機能が利用できます。
Emacsは、Viのようなモードを持たず、常に編集モードです。しかし、viの操作をエミュレートするモードも存在します。チュートリアルも用意されており、初心者でも容易に操作を学ぶことができます。
コマンド
Emacsのコマンドは、
Emacs Lisp関数を呼び出すことで実行されます。多くのコマンドは、キーボードショートカットに割り当てられており、効率的な操作が可能です。外部プログラムを呼び出して結果を
Emacsに表示する機能も備えています。下位
プロセスとの連携も可能で、
シェルや
プログラミング[[言語]]のREPLを
Emacs内で実行できます。
Emacsは、画面最下部に「ミニ
バッファ」という領域を持っており、コマンドやメッセージの入出力に使われます。ファイル名や検索
文字列などの入力を促したり、実行結果を表示したりします。ミニ
バッファでは、タブ補完も利用できます。
ファイル管理と表示
Emacsは「
バッファ」と呼ばれる
データ構造でテキストを管理します。
バッファは複数同時に開くことができ、それぞれ独立して編集できます。ファイルから読み込んだテキストだけでなく、コマンドの出力やヘルプドキュメントなども
バッファで表示されます。Diredと呼ばれるファイルマネージャも
バッファで表示され、ファイル操作も可能です。
Emacsはウィンドウを分割して複数の
バッファを同時に表示することができ、柔軟な作業環境を構築できます。
主モードと副モード
Emacsには、「主モード」と「副モード」という概念があります。主モードは、編集するテキストの種類に応じて振る舞いを変更するもので、
プログラミング[[言語]]や
マークアップ[[言語]]など、様々なファイルタイプに対応した主モードが用意されています。副モードは、主モードの機能をさらにカスタマイズするもので、複数同時に有効にできます。例えば、
C[[言語]]の
ソースコードを編集する場合、Cモードという主モードに加えて、特定の字下げスタイルにする副モードなどを適用することができます。
バッチモード
Emacsは、
テキストエディタとしてだけでなく、
Emacs Lispのインタープリタとしても利用できます。バッチモードでは、GUIを表示せずに
Emacs Lispのスクリプトを実行できます。コマンドラインから
Emacs Lispのコードを実行したり、スクリプトファイルを作成したりできます。
Emacsには、詳細な
マニュアルが付属しています。
マニュアルは
Emacs内で閲覧でき、操作方法や機能について学ぶことができます。
Emacs Lispプログラミングに関する
マニュアルも用意されています。
国際化
Emacsは、多種多様な
文字コードをサポートしており、様々な
言語のテキストを扱うことができます。
UTF-8にも対応しており、
多[[言語]]のテキストを混在して編集することも可能です。ただし、ユーザーインターフェースは基本的に
英語であり、一部の機能が
多[[言語]]に対応していない場合があります。
日本語化
Emacsには、日本語対応版としてNemacsやMuleが存在します。Muleは
多[[言語]]対応版であり、複数の
文字集合を混在して編集できます。日本語版
Emacsは、
MS-DOS環境にも移植されていました。
拡張性
Emacsは、
Emacs Lispを用いてほぼ無限に拡張可能です。新しいコマンドや
バッファモード、キーマップを定義したり、ユーザーインターフェースをカスタマイズしたりできます。多くの拡張機能がコミュニティによって開発されており、パッケージマネージャを利用してインストールできます。
主な拡張機能の例
AUCTeX: TeX/La[[TeX]]文書編集
Calc: RPN
計算機
Calendar-mode: カレンダー機能
Dired: ファイルマネージャ
Emacs Speaks Statistics (ESS): 統計言語編集モード
ERC/rcirc/Circe: IRCクライアント
Eshell: Emacs Lispシェル
Magit: Git連携機能
Org-mode: Todo管理、ドキュメント作成
SKK:
日本語入力システム
SLIME: Common Lisp開発環境
W3M: テキストブラウザ
パフォーマンス
Emacsは、
Emacs Lispのインタープリタで動作するため、初期の実装では動作が遅いという欠点がありました。しかし、現在のコンピュータは十分に高速であり、
Emacsの動作速度は実用的なレベルに達しています。
C[[言語]]で記述されたコードを利用したり、JIT
コンパイラを利用したりすることで、パフォーマンスの向上が図られています。
プラットフォーム
Emacsは、様々な
オペレーティングシステムに対応しています。
LinuxやmacOSなどの
Unix系OSだけでなく、WindowsやDOSでも動作します。テキスト
端末とGUI環境の両方で動作し、グラフィカルな表示も可能です。
GUIへの対応
Emacsは元々テキスト
端末での利用を想定していましたが、X Window Systemに対応したことでGUI環境でも利用できるようになりました。現在では、複数のフォントや画像を表示したり、メニューバーや
ツールバーなどのGUI要素を利用したりできます。macOSやWindowsでは、各プラットフォームのネイティブなグラフィックスシステムを利用できます。
Windows
Windows版の
Emacsは、Visual
C++や
Cygwinでコンパイルできます。バイナリ形式で配布されており、zipを展開するだけで利用できます。日本語入力には問題があるため、パッチを当てた
Cygwin版を利用するのが一般的です。
macOS
macOS版の
Emacsは、初めからインストールされています。GNU
Emacs 23以降は、Cocoa APIを利用したGUIで動作します。Carbon APIを使ったCarbon
EmacsやAquaをGUIとしたAquamacsなどのバリエーションも存在します。
フォーク
Emacsには、いくつかのフォークが存在します。有名なものとしては、X
Emacsがあります。X
EmacsはGNU
Emacsから派生したエディタで、独自に開発が進められてきました。
MeadowやSX
Emacs、Aquamacsなどの派生も存在します。
リリース履歴
Emacsのリリース情報は、NEWSファイルに記載されています。以前のバージョンにダウングレードする際は、Antinewsファイルを参照できます。