[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

17. メジャーモード

Emacsには、多数の選択できるメジャーモード(major mode)があり、 各モードは特定の種類のテキストを編集するためにEmacsをカスタマイズします。 メジャーモードは相互に排他的で、 各バッファはいつでも1つのメジャーモードだけを持ちます。 モード行は、通常、現行のメジャーモードの名前を括弧の中に表示します (see section モード行)。

もっとも特殊化されていないメジャーモードは、 基本(fundamental)モードと呼ばれます。 このモードには、モード独自の再定義や変数設定がなく、 各Emacsコマンドはもっとも一般的なふるまいをして、 各オプションはデフォルトの状態になっています。 Lispや英文のように、Emacsが知っている特定の種類のテキストを編集するには、 Lispモードや、テキスト(text)モードのような 適切なメジャーモードに切り替えるべきです。

メジャーモードを選択することは、 編集対象の言語により明確に適応するようにキーの意味を多少変更することです。 よく変更されるキーはTABDELC-jです。 プレフィックスキーC-cは、モード特有のコマンドを含みます。 さらに、コメントを扱うコマンドは、 モードを使ってコメントの区切り方を決定します。 多くのメジャーモードでは、 バッファ内に現れる文字の構文上の属性を再定義しています。 See section 構文テーブル

メジャーモードは3つのグループに分けられます。 (いくつかの変種を有する)Lispモード、Cモード、Fortranモード、 その他のプログラム言語特有のモードのグループがあります。 テキスト(text)モード、nroffモード、 TeXとアウトライン(outline)モードなど 英文を編集するためのものがあります。 残りのメジャーモードは、ユーザーのファイルに使うためのものではありません。 Emacsが特別の目的のために作るバッファで使われます。 dired(see section ディレクトリエディタdired)が作るバッファ向けのdiredモード(see section ディレクトリエディタdired)、 C-x mで作られるバッファ向けの メイル(mail)モード(see section メイルの送信)、 下位のシェルプロセスとの通信用のバッファ向けのシェル(shell)モード (see section 対話的な下位のシェル)などです。

ほとんどのプログラム言語用のメジャーモードでは、 段落の区切りは空行だけです。 これは、段落コマンドを役立つようにするためです。 (see section 段落。) また、これらのモードでは、 自動詰め込み(auto-fill)モードにおいて、 新たに作った行を字下げするようにTABを定義します。 というのは、プログラム中のほとんどの行は通常字下げされるからです。 (see section 字下げ。)


17.1 メジャーモードの選択方式

カレントバッファに対して明示的にメジャーモードを選択することもできます。 しかし、たいていは、ファイル名やファイル内の特別のテキストに基づいて Emacsはどのモードを使うかを決定します。

明示的に新しいメジャーモードを選択するには、M-xコマンドで行います。 メジャーモードの名前に-modeを付け加えると、 そのモードを選ぶコマンド名になります。 したがって、Lispモードに入るにはM-x lisp-modeを実行します。

ファイルを訪問すると、Emacsは通常ファイル名に基づいて 正しいメジャーモードを選択します。 たとえば、`.c'で終る名前のファイルは、Cモードで編集されます。 ファイル名とメジャーモードとの対応は、 変数auto-mode-alistで制御します。 その値は、要素がつぎのような形式のリストです。

 
(regexp . mode-function)

または、つぎの形式です。

 
(regexp mode-function flag)

たとえば、このリストに通常ある要素は、 ("\\.c\\'". c-mode)です。 これは、`.c'で終る名前のファイルにはCモードを選びます。 (Lispの構文では、`\'を含めるには`\\'が必要。 また、`\'は、正規表現の`.'の特別な意味を抑制するために必要。) リストの要素が (regexp mode-function flag)の形式で flagnil以外ならば、 functionを呼んだあとにregexpに一致する接尾辞を捨てて、 リストで他に一致するものをふたたび探します。

ファイルの空行でない最初の行の特別な種類のテキストによって、 そのファイルを編集するためにどのメジャーモードを使うかを指定できます。 モード名は、その行に`-*-'で囲まれて現れます。 他のテキストがその行にあってもかまいません。 たとえば、

 
;-*-Lisp-*-

は、EmacsにLispモードを使うように指示します。 このような明示的な指定は、 ファイル名に基づいたメジャーモードに優先します。 この行がLispのコメントになるように セミコロンを使っていることに注意してください。

モードを指定する別の書式は、つぎのとおりです。

 
-*- mode: modename;-*-

これは、同様にローカル変数も指定できて、つぎのように書きます。

 
-*- mode: modename; var: value; … -*-

より詳しくは、See section ファイルにローカルな変数

ファイルの内容が`#!'で始まるときは、 ファイルの1行目で指定したコマンドインタープリタを実行することで、 実行可能なシェルコマンドとして働きます。 ファイルの残りの部分は、インタープリタへの入力として使われます。

Emacsでそのようなファイルを訪問したとき、 ファイルの名前がメジャーモードを指定しないときには、 Emacsはモードを選択するために1行目のインタープリタの名前を使います。 1行目が、`perl'や`tcl'のような認識される インタープリタプログラムの名前ならば、 Emacsはインタープリタのプログラムにとって適切なモードを使用します。 変数interpreter-mode-alistは、 インタープリタプログラム名とメジャーモードとの対応を指定します。

1行目が`#!'で始まるときには、 インタープリタを実行するときにシステムが混乱するため、 1行目では`-*-'の機能を使えません。 そのため、そのようなファイルでは、Emacsは1行目に加えて2行目でも `-*-'を探します。

使用するメジャーモードを指定しないファイルを訪問したとき、 あるいは、C-x bで新たにバッファを作るときには、 変数default-major-modeが、使用するモードを指定します。 通常、その値は、基本(fundamental)モードを指定する シンボルfundamental-modeです。 default-major-modenilなら、 メジャーモードはまえに選択していたバッファのモードと同じものとなります。

バッファのメジャーモードを変更しても、 Emacsが自動的に選択するメジャーモードに戻れます。 それには、コマンドM-x normal-modeを使います。 このコマンドは、メジャーモードを選択するために find-fileが呼び出す関数と同じ関数です。 この関数は、ファイル中にローカル変数リストがあればそれも処理します。

コマンドC-x C-wset-visited-file-nameは、 新しいファイル名がモードを示すものであるなら、 新しいメジャーモードに変更します(see section ファイルを保存する)。 しかし、バッファの内容がメジャーモードを指定していて、かつ、 ある『特別な』メジャーモードがそのモードの変更を許さないなら、 メジャーモードは変更されません。 change-major-mode-with-file-namenilに設定すると、 このモード変更機能をオフにできます。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.