[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [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. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
カレントバッファに対して明示的にメジャーモードを選択することもできます. しかし, たいていは, ファイル名やファイル内の特別のテキストに基づいて 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 新堂 安孝 on September 22, 2009 using texi2html 1.82.