Emacsのinit.elを分割して管理するinit-loaderとパッケージのインストールに関するベストプラクティスっぽいものを調べてみた

今日はGoの勉強をしておこうかと思ったんだけど、自分のEmacsの設定が気になって気になってそっちの方ばっかりやってしまった。というわけで、今日はEmacsの設定に関するものを色々調べたのでメモっておく。

いままで、Emacsの設定はinit.elの中に全て書いてたんだけど、init-loaderを使うとLinuxのinit.dの中にあるスクリプトファイルように起動時の設定を分割して管理することが出来るようになる。こうすることで、どこに設定があるのかわかりやすくなる。これはなかなかカッコイイ。

そして、[twitter:@syohex]さんのdotfilesのEmacsの設定を参考にしてみると、init-loaderだけじゃなく、パッケージのインストール方法など興味深い内容が沢山あったのでそちらも真似して設定することにした。

[twitter:@syohex]さんのdotfilesのディレクトリ構成はだいたい以下の様な感じになっている。

  • emacs/
    • elpa/ ・・・ELPAでインストールしたパッケージが入る
    • elisps/・・・ELPA以外でインストールしたパッケージが入る
    • init_loader/・・・分割した設定ファイルが入る
      • 01_basic_setting.el・・・分割した設定ファイルの例
      • 02_xxx.el
    • init.el・・・Emacs起動時によみこまれる
    • setup.el・・・初期化時やパッケージ追加時に実行してインストールを行う

まず、いちばん最初にこのdotfilesを持ってきてやることは、emacsディレクトリに行って以下のコマンドでsetup.elを実行すること。こんなかんじで。

$ /Applications/Emacs.app/Contents/MacOS/Emacs -Q -l setup.el

これで、setup.elに書いてあるパッケージがelpaやelispsディレクトリにインストールされて準備完了。次に、emacsを起動した時にはinit.elが実行され、ここでinit-loaderがよばれ、init_loaderディレクトリにある設定を1つずつ読み込んで行く、という流れになる。この時エラーなどがあると*init log*バッファに以下のようにエラー内容が出力されている。こんな風に。

------- error log -------
/Users/hironemu/.emacs.d/init_loader/01_basic_setting.el. Cannot open load file: auto-highlight-symbol

これを見ながらエラーを解決しよう。

今日はとりあえず、01_besic_setting.elに今までinit.elに書いてあった内容を全部コピペしてきただけにした。あとは、地道に個別の設定ファイルに抜き出そうと思う。


init-loaderもよかったんだけど、setup.elの内容もなかなか勉強になった。このファイルを見ると、ELPAで何をインストールしているか、ELPA以外で何をインストールしているのかすぐに分かる。特に今まではELPA以外のものはどこからインストールしていたのかコメントを書いていないと分からなくなっていたんだけど、その心配もなくなる。以下は、setup.elの一部抜粋。こんな感じでパッケージをリストアップする。

;; ELPAでインストールするパッケージ
(defvar base-packages
  '(
    ;;;; for auto-complete
    auto-complete fuzzy popup pos-tip

    ;;;; editing utilities
    expand-region wrap-region
    undo-tree multiple-cursors smartrep
    yasnippet goto-chg
    smartparens
    ag

    ;;;; buffer utils
    elscreen yascroll

    ;; Haml
    haml-mode

    ;; go
    go-mode

    ;; ruby
    rvm ruby-block ruby-compilation ruby-end ruby-interpolation

    ))

;; ELPA外のパッケージ
(defvar my/nonelpa-packages-url
  '(
    "https://raw.github.com/emacsmirror/auto-highlight-symbol/master/auto-highlight-symbol.el"
    "http://www.neilvandyke.org/revbufs/revbufs.el"
    ))

Emacsの設定もほとんどコピペなので、ちゃんと書けるようになりたいね。