Emacsのinit.elを分割して管理するinit-loaderとパッケージのインストールに関するベストプラクティスっぽいものを調べてみた
今日はGoの勉強をしておこうかと思ったんだけど、自分のEmacsの設定が気になって気になってそっちの方ばっかりやってしまった。というわけで、今日はEmacsの設定に関するものを色々調べたのでメモっておく。
いままで、Emacsの設定はinit.elの中に全て書いてたんだけど、init-loaderを使うとLinuxのinit.dの中にあるスクリプトファイルように起動時の設定を分割して管理することが出来るようになる。こうすることで、どこに設定があるのかわかりやすくなる。これはなかなかカッコイイ。
- init-loader.el と package.el を導入して快適 Emacs ライフ - Qiita
- GitHub - emacs-jp/init-loader: Original is http://coderepos.org/share/browser/lang/elisp/init-loader/init-loader.el
そして、[twitter:@syohex]さんのdotfilesのEmacsの設定を参考にしてみると、init-loaderだけじゃなく、パッケージのインストール方法など興味深い内容が沢山あったのでそちらも真似して設定することにした。
[twitter:@syohex]さんのdotfilesのディレクトリ構成はだいたい以下の様な感じになっている。
まず、いちばん最初にこの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の設定もほとんどコピペなので、ちゃんと書けるようになりたいね。