fnwiya's quine

自分自身を出力するブログ

emacsファイル分割の話

init.elが肥大化してくると
一つの設定ミス/アップデートのせいで全部起動しないみたいな悲しい状況になります。
それを避けるため&管理しやすさのためにファイル分割するのが定番ですね。

以下のコードでemacsを起動した際、
まずinit.elそして"~/.emacs.d/loader-init"のフォルダ内の設定ファイルを読み込んでくれます。
"~/.emacs.d/init-loader"や"~/.emacs.d/config"のような名前にしている方が多いようですが
僕は補完の際に頭文字が被ると不便なので"loader-init"にしてます。
(iはinit.elがcはcacheがいる)

(let ((default-directory (expand-file-name "~/.emacs.d/elisp")))
  (add-to-list 'load-path default-directory)
  (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
      (normal-top-level-add-subdirs-to-load-path)))

(require 'init-loader)
(setq init-loader-show-log-after-init nil)
(init-loader-load "~/.emacs.d/loader-init")

今のファイル分割はこんなかんじです。

01-basic-setting.el
02-util.el
04-language.el
05-cache.el
06-recentf.el
07-font.el
11-term-mode.el
12-exec-path-from-shell.el
13-multi-term.el
14-eshell.el
20-display.el
22-mode-line.el
23-tabbar.el
26-highlight-indentaion.el
27-rainbow-mode.el
28-neotree.el
30-dired.el
31-helm.el
32-popwin.el
33-auto-complete.el
34-yasnippet.el
35-anzu.el
36-expand-region.el
37-multiple-cursors.el
38-quickrun.el
39-undo-tree.el
40-wgrep.el
41-migemo.el
42-helm-swoop.el
43-ace-jump.el
50-flycheck.el
51-python_mode.el
52-markdown-mode.el
53-c-mode.el
54-js-mode.el
59-minor-settting.el
60-git.el
70-eww.el
80-others.el
90-after-init.el
99-keybind.el

番号を振っているのは読み込みの順番が関係するものがあるので(小さい順に読み込まれる)
どう分けるかはイマイチ定番がないみたいなので我流です。
一応法則は

  • 一桁は基礎設定
  • 10番台はシェル関連
  • 20番台が見た目関連
  • 3~40番台は入力支援
  • 50番台がmode
  • 70番台が外部連携
  • 最後がキーバインド(読み込み設定でオーバーライドされるのを防ぐため)

メンテナンス性はだいぶ上がりましたがそろそろ溢れそうなのでまとめられるところはまとめたほうがいいですね。