Emacs のモードは、様々な状況での使用において オンまたはオフに (もちろん、カスタマイズも) できる、 また別の振る舞いと機能です。 文書を書く、いろいろな言語 (C, C++, Perl, Python, Java その他多数) でプログラミングをする、 ホームページを作成、E-mail を送る、 Usenet ニュースを読む、予定表、そしてゲームで遊ぶ.. モードこそが、ある一つのエディタ (Emacs) を、 これらすべてが等しく便利にこなせるようにしているものです。
Emacs のモードは、単にいろんな方法で Emacs を拡張、変更、強化する Lisp コードのライブラリです。
基本的に 2 種類のモード - メジャー・モードとマイナー・モードがあります。 これらの区別を理解することは、オフとオンを何度か実際に試してみるまで 簡単ではありませんが、やってみましょう。
ある時点で有効なメジャーモードは 1 つのみです。 逆に、多くのマイナーモードは、同時に動かせます。 メジャーモードは言語または特定の処理に対応する傾向があり、 マイナーモードは多くの処理に共通する、より小さく一般的な 処理に対応します。
大体の概要を確かめるために、例を試しましょう。
昔ながらの普通のテキストファイルを書いている時、
私が大変良く使うモードがあります。
text-mode
というものです。
このモードは、README ファイルのような非定型テキストを書くために
設計されています。
このモードは、どのように単語と段落を識別するかについて理解していて、
通常、私が普通のキー入力操作を使った時は、私が期待した通りのことを
してくれます。
私が誰かのためにテキストを書くときは、一般に見映えするものが書きたいです。
適切にワードラップしてほしい、など。
ワードラップを有効にするために、私は auto-fill
マイナーモードを立ち上げます。
どんどんタイプしていって、行の終りに到達すると、
このモードは「やるべきこと」(訳注: 単語境界での行折り返し - ワードラップ)
をやってみてくれます。
これはマイナーモードなので、ほかのいろんな
メジャーモードで動作します。
行末に到達したときに私が ``やってほしいこと'' は、
例えば text-mode
の時と java-mode
の時とでは違います。
私は自分の Java コードを英語テキストのようにワードラップしたくは
ありません。
しかし、自分の Java コード中のコメントブロックはワードラップ
して欲しい
です!
auto-fill
モードはそのへんを理解してくれるよう賢くできています。
様々な Emacs モードの作者たちは、マイナーモードとして 動作すべきものが確かにマイナーモードであることを確かめるために、 たくさんの作業をしてきました。
Emacs のスクリーンの ASCII による略図まで戻って注意して見れば、 モード行が Emacs のモードを識別することに気づくでしょう。 この場合は、デフォルトモードである ``Lisp Interaction'' と呼ばれる モードになっています。 それは、 Lisp コードを書こうとしている場合にのみ本当に役立ちます (Emacs のほとんどが Lisp で書かれているのだから、構わないですね)。
まず何よりも先に、 Emacs はプログラマによってプログラマのために設計されました。 思いつくほとんどすべての一般的なプログラミング言語 (そしていくつかの それほど一般的でない言語) のために、高品質なモードが利用可能です。 私はそれらの一部をここで簡潔に説明するにとどめます。
大部分のプログラミングモードは、かなりの一般的な特徴を共有します。 普通、それらは次のうちのいくつか、または全部です -
さらに、あるプログラミング言語に特化しない、多くのプログラミング言語に 共通する作業を援助するモードがあります。 バージョンコントロールソフトウェアとのインタフェースのように、 自動的にコードにコメントを追加すること、Makefile を作成すること、 変更履歴 (ChangeLog) を更新することなどです。
これらのすべてのモードの存在をもひとまとめにして Emacs コードの 完成と安定性を考えてみれば、販売されている商用の C++ や Java のような言語のための統合開発環境 (IDE) といい勝負になることが わかるでしょう。 で、もちろん、Emacs はフリーでもあります。
C と C++ と Java の構文はとても似ているので、
(Objective-C と IDL を一緒にするのと同様に、)
3 つのすべての言語を一緒に
取り扱う 1 つの Emacs モードがあります。
とても成熟して完成したパッケージで、Emacs の配布に含まれています。
このモードは cc-mode
または CC Mode
と呼ばれます。
より詳しい説明あるいは新しいバージョンのダウンロードは http://www.python.org/emacs/ へどうぞ。
Emacs で Perl コードを編集するためには、2 つのモードがあります。
1 つ目は (期待している通り) perl-mode
と呼ばれる
もので、2 つ目は cperl-mode
です。
私はなぜ 2 つもモードがあるのか、理由も成り行きも知りませんが
(文書には書かれていない)、perl-mode
のほうが
Emacs で Perl コードを編集するときのモードとしてはオリジナルだということ
がわかります。
cperl-mode
よりも機能が少ないようで、
Perl の「突飛な」言語構成のなかには認識できないものもあります。
個人的には、私は、活発にメンテナンスされているように見えて、
私がこれまでに欲しいと思った機能すべてを持っていた
cperl-mode
を使い、推奨します。
最新のリリースは、ここで見付けることができます -
ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs。
しかし、私の言葉をそのままに受け取らないでください。 両方を試して、最も必要にあったものを選んでください。
Python (とても人気があるもう 1 つのスクリプト言語) も、 利用可能な Emacs モードを持っています。 私が知る限りでは、それは GNU Emacs と一緒 ではなく、 XEmacs と一緒に配布されています。 もっとも、どちらのエディタでも大変うまく動作します。
python-mode
は公式 Python web サイト
http://www.python.org/emacs/python-mode/
から入手できます。
プログラマの助けとなる、とてもとても多くの他の編集用モードが利用可能です。 そのようなお手伝いモードには次のようなものがあります -
そしてもっとたくさんあります。 他のモードやアドインを見つけるためのさらなる情報は、この文書の 他の情報源 の節を参照してください。
凝った Emacs モードの数々は、コードを書く人々のためだけに 限られたものでは ありません。 (どんな種類であれ) 文書を書いている人々もまた、 Emacs モードの広い品揃えの恩恵を受けられます。
ispell
モード)多くの種類の文書の著者は、時々スペルチェックをする必要があります。
GNU ispell をインストールしていれば、
M-x ispell
と入力することで、現在のバッファのスペルチェックを
することができます。
もしも ispell が知らない語を見つけると、可能な置換えのリストを表示して
入力を促し、その中から 1 つ (または 0) を選ばせます。
それは機能的に、一般的な多くのフリーでないソフトウェアパッケージの
スペルチェッカと同等です。
html-helper
モード)自分が
時々 (あるいは良く) HTML ファイルを書いていることに気付いたならば、
html-helper-mode
を試してみたくなるでしょう。
それは
http://www.santafe.edu/~nelson/tools/ から、
文書の関連物として入手可能です。
その名前が示す通り、html-helper-mode
は、
まだ HTML を手作業 -- 昔ながらの方法 -- で書いている多くの人々を
手助けする道具を用意しています。
tex-mode
)TeX で文書を書くときは、Emacs がバックスラッシュや括弧などの
文字に色を付けたり強調してくれると便利なことがよくあります。
tex-mode
はそれをやってくれます。
私はもはや TeX で直接書くようなことはしませんが、 書いていたころは、 TeX ソースをちょいと読みやすくするのにこのモードが役立ってくれました。
sgml-mode
)今読んでいる文書は SGML で書かれています (そしておそらく、現在読んでいる
形式に変換されている)。
sgml-mode
は SGML 文書のために、すべての基本的なものを
用意しています - 効果、強調、前方参照タグ、後方参照タグ、その他多くです。
もちろん、生活を楽にしてくれる多くの手ごろなモードがあります。 ここでは、人気があるものをいくつか紹介します -
vc
モード)vc
モードは、ファイルのチェックインやチェックアウト、
リリースの管理などをとても簡単にしてくれる、大変人気のある
バージョン管理のバックエンド (RCS, SCCS, CVS) のインタフェースです。
それは Emacs の標準部分で、Emacs の文書中に説明があります。
なぜ、わずかなシェルコマンドを実行するために、他の X のウィンドウや 仮想コンソールに切り替えるのですか? Emacs 内で行うようにして、面倒ごとから解放されてください。
M-x shell
で、Emacs バッファ内にシェルが立ち上がります。
Emacs は舞台裏で本当のシェルと対話しているので、
普通のシェルプロンプトでできることは
(vi
や pine
のようなフルスクリーンのプログラムの
実行を除いて)、たいていこのバッファで行うことができます。
これは Emacs の標準部分なので、Emacs のドキュメント中に 情報を見つけられるでしょう。
なぜ、telnet や FTP を実行するために、他の X のウィンドウや 仮想コンソールに切り替えるのですか? それを Emacs 内で行うようにして、面倒ごとから解放されてください。 (もう、パターンに気付きましたか?)
Emacs の内部でシェルを実行するのと同じように、telnet と ftp を実行
することができます。
自分自身でそれを経験するために、M-x telnet
または M-x ftp
を試してください。
詳細についてうんざりするまで知りたければ、文書を見てください。
なぜ、マニュアルページを読むために、他の X のウィンドウや 仮想コンソールに切り替えるのですか? それを Emacs 内で行うようにして、面倒ごとから解放されてください。 (約束です。もうやめます。)
Emacs 内でシェルを実行するのと同じように、マニュアルページを
読むことができます。
自分自身でそれを経験するために、M-x man
を試してください。
それ以上は、文書を見てください。
ange-ftp
から引用すると -
This package attempts to make accessing files and directories using FTP from within GNU Emacs as simple and transparent as possible. A subset of the common file-handling routines are extended to interact with FTP.
(日本語訳) このパッケージは、GNU Emacs による FTP を使ったファイルと ディレクトリへのアクセスを可能な限り簡単で透過的にするように 試みています。 一般的なファイル操作ルーチンのサブセットは、FTP と互いに影響し合います。
これは、離れたマシン上のファイルを、ローカルにあるかのように
扱うことができることを意味します。
異なるコンピュータ上のファイルを編集する必要があるなら、
(少し違ったパス構文を使って) それを開けと Emacs に命ずるだけです。
ログインやファイル取得の細かいことは Emacs がやってくれます。
C-x C-s
でファイルを保存する時は、ange-ftp
は保存を途中で捕えて、離れたマシンにファイルを書き戻します。
少し違ったパス構文は、このような感じです。
ファイル名は ``myfile'' で ``user'' のディレクトリ、マシン名は
``my.host.org'' であれば、ファイルは次のように開く (C-x f
)
ことができます -
/user@my.host.org:~user/myfile
これもまた、Emacs 配布の標準部分なので、 Emacs 文書中に説明を見つけることができます。
上の例を提供してくれた Etienne Grossmann ( etienne@anonimo.isr.ist.utl.pt) に感謝します。