こんにちは、あなたのEmacsを起動する.emacs Advent Calendarです。みなさまはどうやってEmacsを起動してますか?
本日はinit-loaderを利用しなくなった話をします。「init-loaderが良くない!」って主張ではなく、「めんどくささを感じたのでやめましたよ」ってだけの話です。
現在のファイルはこちら https://github.com/zonuexe/dotfiles/blob/master/.emacs.d/init.el
init-loaderとは何か
init-loaderは、ディレクトリにある複数の.el
ファイルを順に読み込むことができるツールです。init-loaderの利点を説明したblog記事はいくつもあるのですが、init-loader:init.elを分割で得られる7つの恩恵や Emacsの設定ファイルをinit-loaderを使ってきれいにした話 - Aqutras Members' Blog がわかりやすくまとまってます。
init-loaderとtadsan氏
じつは、.emacs Advent Calendar 2013の初回に書いたぼくの.emacs 2013の時点ではinit-loader
を使ってました。
この頃は当時の~/.emacs.d/init.el
はzonuexe/.emacs.dからご覧いただけます。この頃の私はconf/ディレクトリに小さな.el
ファイルを作り、init-loader
で順にロードする思想だったことが観察できます。
しかしこのリポジトリは2013年末から開始して2014年9月頃に抛棄してしまったようです。
kawabataさんのinit.el
2014年に(kantou-emacs #x01) #関東Emacsでお会ひした川幡さん(@kawabata@github /GitHub: @kawabata)のinit.el
は衝撃でした。emacs-zsh-historyの実装に利用されたCCLを使ったロストテクノロジーによる謎テクニック(本人による解説:Emacs で zsh の ヒストリファイルを閲覧・編集する - A Riddle Wrapped in a Mystery)も圧巻でしたが、init.elのライブコーディングもそれに匹敵する衝撃でした。
このinit.el
は1ファイルだったのです。──モダンな.emacs
ファイルは複数分割される。そのような誤解すらもあったのかもしれません。その年末に書いたぼくの.emacs 2014では殴られたような衝撃
とまで表現してます。
複数ファイルの複雑さ
たしかに、それ以前から複数ファイル構成に煩しさを感じてたことは確かです。
- ファイルのロード順の変更がめんどい (ファイルのリネームが必要)
- 設定変更時に別ファイルを開き直すのがめんどい
- 連番の管理や「帯域1」の記憶がめんどい
- 複数の言語やパッケージにまたがる設定をどこに書くか悩みが生じる
- 設定の加除によって「コメントしかないファイル」が生まれる
挙げれば不満はいくつも出てきます。そうです、複数ファイルが開けて嬉しいことなど私にとっては全然なかったのです。
27-php.el
にPHP向けの設定を書けばわかりやすい……? いや、別にinit.el
を開いてC-sとかswoop2とかでphp
って検索すれば一発で飛べるんじゃね? (imenu3でもいいよ)
かくして悩みを振り切ってinit-loader
を捨てて1ファイルの.emacs
に走ったのでした。kawabataさんほどの藝術性はありませんし、実のところそんなに一貫性もありませんが、たくましい子に育ちました。
私とEmacsと頻度
1ファイルにしてから頻繁にinit.el
開くようになったよなー と思ったので集計してみた。……むらはあるものの、今年に入ってから2〜3日に一度以上は更新してるペースですね。仕事中でも、忙しいときほど自分の行動に疑問を持ったらさくっとEmacsの設定を直してる自覚はあります。
% git log --date=short --pretty='%cd' init.el | cut -d- -f1,2 | uniq -c
1 2016-12
14 2016-11
12 2016-10
6 2016-09
10 2016-08
8 2016-07
18 2016-06
18 2016-05
10 2016-04
8 2016-03
8 2016-02
6 2016-01
5 2015-12
19 2015-11
19 2015-10
14 2015-08
8 2015-07
16 2015-06
6 2015-05
11 2015-04
7 2015-03
9 2015-02
9 2015-01
6 2014-12
8 2014-11
あとがき
生真面目にファイルを分けてちまちま管理するだけじゃなくて、1ファイルで雑にやっていく道もあるんだよ、ってことを選択肢に入れていただければ幸甚ですね ヾ(〃><)ノ゙
脚注
-
ここでは、「0〜9はEmacs環境全体の初期化」「10番台はコーディングの基盤になる補助ライブラリ/フレームワークの設定」「20番台は各種プログラミング用モードの設定」「90番台は依存関係を持たないアプリケーションの設定」などと、大まかな役割に分けてファイルを分割すること。 ↩
-
imenu.el の使い方と応用 — ありえるえりあ i-modeの公式メニューでゎなぃ ↩