計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

Emacsの共通設定をgitで管理する

Emacsの設定を変更するたびに、PCやサーバーごとに複数init.elを同じように編集するのはめんどくさい。

init.el~/.dotfiles/.emacs.d/init.elに保存してgitで管理して、~/.emacs.dにはシンボリックリンクを張っておく。

さらに設定ファイルはinit-loaderを使って分割する。

目次

init-loader

init-loaderの利点は、指定したディレクトリにある設定ファイルを全てチェックし、エラーがでないものだけを読み込むところにある。 手元のPCではyatexを使うからyatexの設定が必要、でもサーバーではyatexを入れてないので設定ファイルが邪魔。こういうときはinit-loaderを使って、どのホストだろうがyatexの設定ファイルを指定したディレクトリに入れておけばよい。エラーが出なければうまくloadしてくれる。

init-loaderはEmacsのパッケージ管理ツールを使えばすぐにインストールできる。

init.el

;;
;; hostごとの設定があれば読み込む
;;
(setq init_host (concat "~/.dotfiles/.emacs.d/init_" (system-name) ".el"))
(if (file-exists-p init_host)
    (load-file init_host))


;;
;; package (melpa, marmalade を追加)
;;
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)


;;
;; init-loader
;;
(require 'init-loader)
(setq init-loader-show-log-after-init 'error-only)
(init-loader-load "~/.dotfiles/.emacs.d/inits")

hostごとの設定

~/.dotfiles/.emacs.d以下にinit_xxxxx.elinit_yyyyy.elなどPCやサーバーなどホストごとの設定ファイルを用意して、gitでまとめて管理しておく。

Emacsでは(system-name)でPCの名前が取得できる。scratchで(system-name)と書いてC-jで評価して確認するといい。

上のinit.elではconcatで文字を結合してinit_hostにファイルのフルパスを設定
file-exists-pでファイルが存在すればloadするようにしている。

使用しているホストの1つがemacsバージョン23で、 package.elはデフォルトでは使うことができない。package.elは外部に保存していて、そこのロードパスを書いておかなければならないので ホストごとの設定に書き込んで、init.elの一番上に書いてある。

init-loaderの設定

パッケージ管理ツールを使ってinit-loaderをインストールしたので、packageの設定はinit-loaderの設定より先に書いておかないといけない

(setq init-loader-show-log-after-init 'error-only)と書いておくとエラーがあるときだけログが出力されるはずなのだが、関係なしに起動時に毎回ログが出力される。よくわらないけどまあいい。

(init-loader-load "~/.dotfiles/.emacs.d/inits")で、読み込み先のディレクトリを指定。このディレクトリにおいてある.elファイルをloadしてくれるようになる。

~/.dotfiles/.emacs.d/inits/の設定ファイルはこのように分割しておいた

00_backup.el
00_key_binding.el
00_lang_encoding.el
00_load-path.el
09_whitespace.el
09_etc.el
10_org-mode.el
10_recentf.el
10_spell_check.el
10_uniquify.el
20_tex.el
30_anything.el
30_auto-complete.el
30_migemo.el
30_undo-tree.el
30_volatile_highlights.el
99_custom.el

custom-set関係

Emacsで色の設定をしたときなど、通常init.elの最後にcustom-set-variablesが保存される。この部分もgit管理下のディレクトリに移動したい。

ここを参考にする

http://vinelinux.org/docs/vine5/manuals/utils-1-10-3.html

init-loaderで読み込むディレクトリの最後、99_custom.elにcustom-set関係のファイル(custom-file)の出力先を変更するような設定を書いておく。

;;
;; customizeの出力先
;;
(setq custom-file "~/.dotfiles/.emacs.d/custom-file.el")
(if (file-exists-p (expand-file-name "~/.dotfiles/.emacs.d/custom-file.el"))
    (load (expand-file-name custom-file) t nil nil))

custom-fileはinit-loaderで読み込むディレクトリに置かないほうがいい。2重に読み込んだりして難しいことになった。

~/.dotfiles/.emacs.d/custom-file.elにさっきのcustom-set-variables関係の設定をコピーしておく。