読者です 読者をやめる 読者になる 読者になる

Emacsのカスタマイズを高速にする設定

UEC Advent Calendar 21日目のKENNです。初めてのブログ投稿としてEmacsのカスタマイズを書きたいと思います。

何をする?

  1. 設定ファイルの分割
  2. Emacs Lisp追加の簡略化

自分で一から設定を作るのは大変なため、他所からパッケージを追加して好きなカスタマイズを盛り込むための準備を速攻で行います。 カスタマイズのためのカスタマイズと言うと聞こえは変ですが、これをやっとくと確実に作業が早くなります。

まずは下ごしらえ

Emacsをインストールすると${HOME}以下に.emacsが作成されます。これにEmacs Lispで設定をを書き込むことによってEmacsを拡張できます。 すべての設定を.emacsに記述することも可能ですが、設定が増えた時に管理が難しくなるため設定ファイルを分割します。

${HOME}下にディレクト.emacs.d/init.elを作成し、.emacsに以下のように記述します。 (この.emacs.d, init.elはきちんとパスが通るように各設定ファイルに変更が加えられるなら好きな名前に変えて良いです。)

(load (expand-file-name (concat (getenv "HOME") "/.emacs.d/init")))

これで.emacs.d下のinit.elを設定として読み込んでくれるようになります。

1.Emacsのカスタマイズを気分よく、キレイに

Emacs起動時にEmacs.emacsに書かれたコードを頭から読み込んでカスタマイズを実行するのですが、途中でスペルミスや文法ミスが発見されると今まで読み込んだ設定を全て破棄してスタート画面に入ります。これだと間違いを修正するために使用するEmacsは設定がまっさらな状態で扱いにくい上にがっかりします。

しかしinit-loader-xを使うとミス以外の部分はきちんと取り込んで実行してくれるようになります。また、これによって設定ファイルを細かく分割することができるようになるため、弄りたい設定を.emacsで探しまわることはなくなります。

init-loader-xをインストール

gitからinit-loader-xをインストールしたら,それを.emacs.d/下に置きます。 インストールが完了したら.emacs.d/init.elに以下のように書き込みます。

(require 'init-loader-x "~/.emacs.d/init-loader-x")
(init-loader-load "~/.emacs.d/inits")

これでinit-loader-xによって更にinits下のEmacs Lispを読んでくれるようになります。 二段階で読み込み先を変えるようになって二度手間のように感じるかもしれませんが、見やすさのためなので納得しましょう。 ここでinit-loader-xがinits下のEmacs Lispを読み込むにあたって、数字をファイル名の先頭につけるという命名規則があります。この数値の昇順にファイル群が読み込まれます。 ex: 04_package-install.el

使用するEmacs Lispごとに新しい設定ファイルを用意し、ファイル名も番号の後ろに同じ名前をつけておくと後で設定を見直すときに誤解しにくいです。 読み込みの順序には注意が必要なことがあり、例えばcl-libを読み込むと使用文字コードが以前の設定に関わらずjapanese-8bitに直されてしまうため、私はutf-8を常に使うために文字コードの設定は添字の数が大きいファイルに書き込んでいます。

####byte-compileについて Lispは神の言語らしいのであんまり悪いことは言えませんが、実行速度は遅めです。なので.elファイルをバイナリファイルに変換することで高速化を図ります。バイコンパイルは、
M-x byte-compile-file RET ファイル名
で実行可能です。 これによって.elファイルから.elcファイルが作成されます。同名ファイルで拡張子が.elと.elcのものが同時に存在する場合、.elcファイルのみが読み込まれます。
.elファイルは不要に思われますが、.elcファイルは2進数で書かれているため人間にはとても読めません。注意書きや用法が載っている.elファイルは削除しないほうがいいと思います。

2.Emacs LispEmacsから追加できるように

今回の記事ではEmacs Lispはgit cloneやそのままコピーで用意することになると思います。 これを20から30(もしかしたらもっと)のファイルに対して全てやるのは面倒です。Emacsのコマンドでインストールできるようにします。

package-install,auto-installをインストール

.emacs.d/下にelpa/とelisp/を作成しそれぞれにpackage-install,auto-installでインストールしたEmacs Lispを配置されるように設定します。 init.elには以下のように記述します。

elpa,elispにパスを通す

(setq load-path (cons "~/.emacs.d/elpa" load-path))    
(setq load-path (cons "~/.emacs.d/elisp" load-path))

package-installを設定に追加

(require 'package)
;;MELPAを追加
(add-to-list 'package-archives '("melpa" . "http://malpa.org/packages/") t)
;; MELPA-stableを追加
(add-to-list 'package-archives '("melpa-stable" . "http://stable.melpa.org/packages/") t)
;; Marmaladeを追加
(add-to-list 'package-archives  '("marmalade" . "http://marmalade-repo.org/packages/") t)
;; Orgを追加
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
;; 初期化
(package-initialize)

auto-installを設定に追加

(require 'auto-install)
  (add-to-list 'load-path auto-install-directory)
  (setq auto-install-directory "~/.emacs.d/elisp/")
  (auto-install-update-emacswiki-package-name t)
  (auto-install-compatibility-setup)

パスを通しておくことで、使用するEmacs Lispをrequireするときにホームから辿った全てのパスを記述しなくても良くなります。 これで設定は全て終了です。お疲れ様でした。

package-installでEmacs Lispを追加するには、

M-x package-install RET ファイル名

auto-installでは、

M-x auto-install-from-emacswiki RET ファイル名

を使います。

インストールされたら前の3つのEmacs Lisp同様に設定ファイルでrequireします。 この時からは、auto-complete.elをインストールした場合、設定ファイルはinits/09_auto-complete.elのように作ります。 上記のコマンドでインストールされるEmacs Lispは全て.elcファイルにコンパイル済みのためバイコンパイルは不要です。  これで外部のEmacs Lispを手動でちまちまコピーしてバイコンパイルする必要はなくなりました。

完成!

これで好きな設定ファイルをダウンロードしてカスタマイズすることが簡単になります。 それぞれの追加設定についてはgithubはてな、るびきちさんのサイトを参考にすることになると思います。

参考

  1. .emacs.dを公開しました
  2. 年末emacs設定大掃除をして、これは捨てられないと思った設定書いてく
広告を非表示にする