Emacs 編集モードのカスタマイズ
各言語の編集モードに関する設定のメモ
1.概要
Emacsでは各言語(C,Perl,PHP,...)毎に編集モードがあり、各編集モード毎に設定を行える。各言語の構文の違いに合わせてEmacsの挙動をカスタマイズすることができる。
Emacsはモードが設定されると対応するモードフック変数に登録されている関数を呼び出す。このため、各モードのカスタマイズを行うにはEmacsの初期化ファイル(init.el等)でモードフック変数にカスタマイズ設定を行う関数を登録しておけばよい。モードフック変数にはC言語ではc-mode-hook、Perlではcperl-mode-hookなどがある。
2. C言語
C言語の編集モードで参照されるモードフック変数はc-mode-hook。設定ファイル(init.el等)に以下のように書いてc-mode-hookを設定しておけばよい。(setq c-mode-hook '(lambda () (setq c-basic-offset 8) ; 字下げ (setq tab-width 8) ; Tab幅 (setq c-auto-newline nil) ; 自動改行をしない ))
lambdaはリストが関数であることを示す識別子。関数の前についているシングルクォート(')は関数を評価せずリストをそのまま返すことを意味する。これによりc-mode-hookには"(lambda nil (setq c-basic-offset 8) (setq tab-width 8) (setq c-auto-newline nil))"というように関数そのものが設定されることになる。
上記では、変数c-mode-hookにsetqで関数を代入しているが、c-mode-hookにすでに設定があった場合、上書きされてしまう。設定を追加するには以下のようにadd-hookを使用する。Hook用変数を設定するのはadd-hookの方が推奨らしい。
(add-hook 'c-mode-hook '(lambda () (setq c-basic-offset 8) ))
3. Perl
Perlの編集モードの設定にはcperl-mode-hookが使用される。(add-hook 'cperl-mode-hook '(lambda () (setq cperl-indent-level 4) ; 字下げ幅 ))