Emacs のモード

Contents


モードとは?

Emacs は状況に応じて編集しやすいように適切に変化する。その動作の仕方を 決めているのがモード (mode) である。例えば長文のテキストを書く場合は text mode, 整形されたテキストを書く時には indented text mode, C のプロ グラムを書く場合には c mode, Perl のスクリプトを書く場合には cperl mode, などといった具合である。ちょっと調べれば、数え切れないぐらいのモードが 存在することが分かると思う。 (→ 様々なモード)

主モードと副モード

モードには

の二つがある。上に挙げたモードは全て主モードである。一方、副モードは、 共通して使うことの多い機能を実現するのに使われる。主モードが一つのバッ ファに対して同時に一つしか設定できないのに対し、副モードはそれぞれを主 モードとも他の副モードとも独立して併用することができる。文章を自動的に 折り返す auto-fill-mode や、overwrite mode, 仮名漢字変換の SKK 等が 代表的な副モードである。他にどんな副モードがあるかは、やはり 様々なモード を参照。

モードライン

普通に Emacs を起動すると、下から2行目が反転している。これがモードライ ンと呼ばれるもので、Window を分割すれば分かるように、各バッファに一つ ずつ付いている。

[--]E.:----Emacs: *scratch*   10:54pm 0.25 (Lisp Interaction)L22-Bot--

*scratch* がバッファの名前で、( ) で括られて いる部分 (今の場合は Lisp Interaction) が現在のモードを表している。因 みに、Lisp Interaction は名前の通り Lisp 対話モードで、ここに Lisp の コードを打ち込んで評価させたりするのに使われる。 (→ 評価の例)

副モードが起動されていれば、それも表示されたりする。例えば、Text mode で auto fill mode が起動されていれば、(Text Fill) のように表示されてい るはずだ。ついでながら、Text mode の際に常に auto-fill-mode を起動する には、.emacs

(setq text-mode-hook 'turn-on-auto-fill)

と書いておけばよい。この場合 Indented Text mode や YaTeX mode でも auto fill mode が起動する。これは、これらの mode の起動時にも text-mode-hook が実行されるためである。

現在のモードの説明

現在いる主モードの説明は、F1-m (describe-mode) で見ることができる。因み に現在のキーバインドは F1-b (describe-bindings).

どのファイルにどのモードを対応させるか

ファイルの種類とモードの対応は、基本的には auto-mode-alist という変数で決めている。これはファイル名と対応する mode 連想リストで、 あらかじめ、かなりの対応が定められている。

これをカスタマイズするには、例えば次のようにして、 auto-mode-alist の最初の方に対応する連想リストを追加する。

(setq auto-mode-alist
      (append '(("\\.tex$" . yatex-mode)
		("\\.txt$" . indented-text-mode)
		("nifty.[a-z]*$" . xcscript-mode)
		("jyusyo\\.sgm$" . ramdb-mode)
		("pad[0-9]$" . nifty-post-mode)
		("\\.html$" . yahtml-mode)
		("\\.rb$" . ruby-mode)
		("lib[0-9][0-9]$" . qlog-library-mode)
		("/lib$" . qlog-library-forum-mode)
		("\\.pov$" . pov-mode))
	      auto-mode-alist))

見れば分かるように、ペアの第1成分にはファイル名の正規表現、第2成分には 対応するモードが入る。Emacs の正規表現については、ここでは詳しく説明し ないけれど、Lisp により正規表現が一度解釈されるために、\ を再度エスケープする必要があることは注意しておく。例えばピリオドに続い て tex で終了するファイル名にマッチする正規表現 \.tex を Emacs Lisp で記述するためには上のように "\\.tex" と書く必要があるわけである。より詳しく は、Emacs Lisp の Info を見ましょう。インストールしてない人は、 電総研の FTP サイト などから取って来れると思います。


[Emacs のページに戻る]