[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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 字下げ。)
17.1 メジャーモードの選択方式 | How major modes are specified or chosen. |
カレントバッファに対して明示的にメジャーモードを選択することもできます。 しかし、たいていは、ファイル名やファイル内の特別のテキストに基づいて 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)
の形式で
flagがnil
以外ならば、
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-mode
がnil
なら、
メジャーモードはまえに選択していたバッファのモードと同じものとなります。
バッファのメジャーモードを変更しても、
Emacsが自動的に選択するメジャーモードに戻れます。
それには、コマンドM-x normal-modeを使います。
このコマンドは、メジャーモードを選択するために
find-file
が呼び出す関数と同じ関数です。
この関数は、ファイル中にローカル変数リストがあればそれも処理します。
コマンドC-x C-wとset-visited-file-name
は、
新しいファイル名がモードを示すものであるなら、
新しいメジャーモードに変更します(see section ファイルを保存する)。
しかし、バッファの内容がメジャーモードを指定していて、かつ、
ある『特別な』メジャーモードがそのモードの変更を許さないなら、
メジャーモードは変更されません。
change-major-mode-with-file-name
をnil
に設定すると、
このモード変更機能をオフにできます。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.