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

17. メジャーモード

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

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

メジャーモードを選択することは, 編集対象の言語により明確に適応するようにキーの意味を多少変更することです. よく変更されるキーは<TAB>, <DEL>, C-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 字下げ. )


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

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 新堂 安孝 on September 22, 2009 using texi2html 1.82.