.emacs分割のすゝめ

最近ロードバイクを買いました。nagata(@handlename)です。

前回、安易にも無防備な.emacsを晒したら、我らがtypester先生に

「.emacsに全部書くのは小学生までだよね〜」(大幅に誇張あり)

と言われてしまったので、早速.emacsを分割してみたいと思います!

(設定ファイル群をgithubにあげました

なんで分割するの?

そもそもなんで分割するんでしょうか? メリットとしては、こんなものがあります。

  • 見通しがよくなる
  • 環境依存の設定を切り分けられる
  • 一部のファイルにエラーがあっても他のファイルの設定は適用される
  • それぞれ個別にbyte compileできる

一部のエラーが全体に影響しないっていうのはいいですね。とっても。

では、実際に分割する方法を見ていきましょう。

分割してみよう

分割した設定ファイルを読み込むために、IMAKADOさん謹製のinit-loader.elを使います。

指定したディレクトリ内のelファイルを読み込んでくれるelispなのですが、 ファイル名を見て環境(meadowやcarbon-emacs、windowシステムかどうかなど)に合わせて読み込んでくれたり、 エラーのあるファイルはスルーしてくれたりして、単純に.emacsから設定ファイルを読み込むより便利です。

(require 'init-loader)
(init-loader-load "~/.emacs.d/inits") ; 設定ファイルがあるディレクトリを指定

~/.emacs.d/inits ないのファイル構成はこんな感じになってます。 モードごとに設定を切り分けている感じです。

  • 00_display.el
  • 00_encoding.el
  • 00_init.el
  • 00_keybinds.el
  • 10_pre_execute.el
  • 20_custom_commands.el
  • 30_align.el
  • 30_anything.el
  • 30_color-moccur.el
  • 30_elscreet.el
  • 30_hilights.el
  • 30_html.el
  • 30_migemo.el
  • 30_others.el
  • 30_revive.el
  • 30_tramp.el
  • 30_yasnippet.el
  • 40_c++.el
  • 40_elisp.el
  • 40_js.el
  • 40_latex.el
  • 40_lisp.el
  • 40_lisp.elc
  • 40_markdown.el
  • 40_objc.el
  • 40_org.el
  • 40_php.el
  • 40_ruby.el
  • 40_text.el
  • 40_yaml.el
  • 50_flymake.el
  • 50_gtags.el
  • 50_hs.el
  • 50_mmm.el
  • 50_outputz.el
  • 50_symfony.el
  • 50_zencoding.el
  • 51_auto-complete.el
  • 90_post_exec.el

・・・ちょっと多い? エラーがあったファイルは読み込まれないので、 こんな感じにモードごとに分けるのが妥当なんじゃないでしょうか。

せっかくなのでbyte compile

設定ファイルを切り分けたのでbyte compileしてしまいましょう。 emacsの起動がすんごく速くなります。 ディレクトリ内の*.elを一括してコンパイルするには、以下のコマンドを実行してみてください。

emacs -batch -f batch-byte-compile *.el

(2010/07/28 10:00 コマンドが間違っていたので修正しました)

しょっちゅう編集するようなファイルはコンパイルせずにおくのがいいかもしれません。

いままで.emacsのbyte compileはやってなかったんですが、 今回分割した機会にコンパイルしてみたら、 起動にかかる時間がコンパイルしなかったときと比べて2倍以上速くなりました。 (コンパイルなし:約14秒、あり:約6秒)

おわり

分割したことによって、設定ファイルをすっきり管理できるようになりました。 ついでにbyte compileしたことによって、emacsの起動速度も倍速になりました。

ファイルを分割するのでバッファ内検索が使えなくなりますが、 grepで代用すれば問題ないでしょう。

おわり2

init-loader.elには、

  • ファイル名がmeadowで始まるファイルはmeadowだけで読み込む
  • ファイル名がcarbon-emacsで始まるファイルはcarbon-emacsだけで読み込む
  • ファイル名がnwで始まるファイルは非ウィンドウシステムでのみ読み込む

という機能もあるので、複数の環境で設定ファイルを共有したい場合は重宝すると思います。

カヤックでは設定ファイルそのものにすらこだわる技術者も募集しています!