すべてのバッファにはメジャーモードが設定されており、そのバッファがカレントである間のEmacsの編集動作を決定します。モードラインには通常、現在のメジャーモードの名前が括弧書きで表示されます(モードラインを参照)。
最も特化度の低いメジャーモードは、基本モードと呼ばれます。このモードにはモード固有の再定義や変数設定がないため、各Emacsコマンドは最も汎用的な動作となり、各ユーザーオプション変数はデフォルトの状態になります。
Lispコードや英文など、Emacsが認識している特定の種類のテキストを編集する場合、通常はLispモードやTextモードといった、より特化したメジャーモードを使用します。ほとんどのメジャーモードは、大きく3つのグループに分類されます。第1のグループは、プレーンテキストまたはマークアップを含む通常のテキスト用のモードです。これには、Textモード、HTMLモード、SGMLモード、TeXモード、Outlineモードが含まれます。第2のグループは、特定のプログラミング言語用のモードです。これには、Lispモード(いくつかのバリエーションがあります)、Cモード、Fortranモードなどが含まれます。第3のグループは、ファイルに直接関連しないメジャーモードで、これらのモードはEmacsが特定の目的で作成したバッファで使用されます。例としては、Diredで作成されたバッファ用のDiredモード(Dired, the Directory Editorを参照)、C-x mで作成されたバッファ用のMessageモード(Sending Mailを参照)、および下位のシェルプロセスと通信するために使用されるバッファ用のShellモード(Interactive Subshellを参照)などが挙げられます。
通常、ファイルを初めて開いたりバッファを作成したりすると、Emacs によってメジャーモードが自動的に設定されます(ファイルモードの選択を参照)。M-x
コマンドを使用することで、明示的に新しいメジャーモードを選択できます。モード名に -mode
を付加すると、そのモードを選択するためのコマンド名になります(例:M-x lisp-mode で Lisp
モードに入ります)。各バッファにはちょうど 1
つのメジャーモードしか存在しないため、メジャーモードを「オフ」にする方法はなく、代わりに別のモードに切り替える必要があります。
バッファローカル変数 major-mode
の値は、メジャーモードコマンドと同じ名前のシンボル(例:lisp-mode)です。この変数は自動的に設定されるため、自身で変更しないでください。
major-mode のデフォルト値は、メジャーモードが指定されていないファイルや、C-x b で作成された新しいバッファで使用するメジャーモードを決定します。通常、このデフォルト値は
Fundamental モードを指定するシンボル fundamental-mode
です。このデフォルト値は、カスタマイズインターフェース(簡単なカスタマイズインターフェース を参照)で変更するか、init ファイル(Emacs 初期化ファイル
を参照)に次のような行を追加することで変更できます:
(setq-default major-mode 'text-mode)
major-mode のデフォルト値が nil
の場合、メジャーモードは直前にアクティブだったバッファから取得されます。
特化型のメジャーモードでは、そのモードにより適した操作を行うために、特定のキーの意味を変更することがよくあります。例えば、プログラミング言語モードでは、TAB にその言語の規則に従って現在の行をインデントする機能が割り当てられています(インデントを参照)。一般的に変更されるキーには、TAB、DEL、C-j
があります。また、多くのモードでは独自の特殊コマンドを定義しており、通常は C-c
をプレフィックスキーとするキーシーケンスに割り当てられています(キーを参照)。メジャーモードはユーザーオプションや変数を変更することもあります。例えば、プログラミング言語モードでは通常、変数
comment-start
にバッファローカルな値を設定し、これによりソースコードのコメントの区切り方が決定されます(コメントの操作を参照)。
現在のメジャーモードのドキュメント(キーバインドの一覧を含む)を表示するには、C-h m (describe-mode) と入力してください。その他のヘルプコマンドを参照してください。
ファンダメンタルモードを除くすべてのメジャーモードは、モードフックを定義しています。これは、バッファでそのモードが有効になるたびに実行される、カスタマイズ可能なLisp関数のリストです。フックの詳細については、Hooksを参照してください。各モードフックは、そのメジャーモードにちなんで命名されており、例えばFortranモードにはfortran-mode-hookがあります。さらに、すべてのテキストベースのメジャーモードはtext-mode-hookを実行し、多くのプログラミング言語モード13(Emacsに同梱されているものすべてを含む)も、独自のモードフックを実行する前にprog-mode-hookを実行します。フック関数は、変数major-modeの値を参照することで、実際にどのモードに移行しているかを確認できます。
モードフックは、マイナーモードを有効にするために一般的に使用されます(マイナーモードを参照)。例えば、initファイルに以下の行を記述することで、すべてのテキストベースのメジャーモードでFlyspellマイナーモードを(スペルのチェックと修正を参照)、Emacs LispモードでElDocマイナーモードを有効にできます(プログラミング言語ドキュメントの検索を参照):
(add-hook 'text-mode-hook 'flyspell-mode) (add-hook 'emacs-lisp-mode-hook 'eldoc-mode)