LoginSignup
7
7

More than 5 years have passed since last update.

Emacsの設定を共有する

Last updated at Posted at 2016-10-09

自分がgitで管理している.emacs.dのディレクトリ構造と設定を紹介します. 個別のファイルに分割した設定, 複数のPCで共有したい設定・したくない設定を見通しよく管理でき, pullしてemacsを起動するだけで環境を再現できるので便利です.

設定を構築するにあたってtaraoさんの.emacs.dを参考にさせていただきました. というより本質的な部分は丸々借りてきています.

必要なツール

  • バージョン24以上のEmacs
  • git - バージョン管理. 共有したいelispとそうでないものを管理する
  • el-get (要el-get-bundleを含むバージョン) - パッケージのダウンロードとインストールの自動化する
  • init-loader - elispを複数のファイルに分割して管理する

ディレクトリ構造

以下に中心となるファイルを示します. 人によっては他にel-get-user/recipesやテーマファイルなどもgitで管理すると思います.

.emacs.d
├── .gitignore
├── init.el
├── inits
│   ├── .gitignore
│   ├── 00_el-get-install-packages.el
│   ... <gitで管理する他のelisp>
│   └── 99_local-init-load.el
├── local-inits
    ... <サイト固有のelisp>

ファイル

.gitignore

.emacs.d以下には色々なファイル・ディレクトリが作られますが、必ずgitで管理するのは上で挙げたinit.elとinits/そして.gitignore自身です.

.gitignore
*
# whitelist
!init.el
!inits/
!.gitignore

init.el

init.elでは次の処理を行います.1
1. el-getのインストール・設定
2. init-loaderのインストール・実行

このコードでは2.をpackage.elを使って実現しています. stable.melpa.orgのel-getにはel-get-bundleが含まれていなかったので, package-pinned-packagesを設定してmelpa.orgからインストールするようにしています. また、package.elを使わない方法がel-getのREADME.mdに書いてありますので, そちらも確かめてみてください.

init.el
(when load-file-name
  (setq user-emacs-directory (file-name-directory load-file-name)))

(add-to-list 'load-path (locate-user-emacs-file "el-get/el-get"))

(unless (require 'el-get nil 'noerror)
  (require 'package)
  (add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
  (add-to-list 'package-pinned-packages '((el-get . "melpa")))
  (package-refresh-contents)
  (package-initialize)
  (package-install 'el-get)
  (require 'el-get))

(add-to-list 'el-get-recipe-path (locate-user-emacs-file "el-get-user/recipes"))

(el-get-bundle! 'init-loader
  (setq-default init-loader-show-log-after-init nil)
  (init-loader-load))

(el-get 'sync)

inits/

gitで管理するelispを集めたディレクトリです. init-loader-loadがこれらのelispをロードします. elispのファイル名は数字2文字で始まる必要があり、ファイル名の辞書式順序でロードされます.2

00_el-get-install-packages.el

このelでパッケージを自動インストールします. 従ってこのファイルはそれらのパッケージが実際に使われる前にロードしなければなりません. そのため名前を00_xxxとしています. 内容としてはel-get-bundleの羅列です.

inits/00_el-get-install-packages.el(例)
(el-get-bundle flycheck)
(el-get-bundle ggtags)
(el-get-bundle multi-term)
(el-get-bundle powerline)
(el-get-bundle use-package)
...

99_local_init-load.el

ローカルなelispをロードします. この例ではlocal-inits/にelispを格納しています.

local-inits/99_local_init-load.el
(init-loader-load (locate-user-emacs-file "local-inits"))

.gitignore

gitに99_local_init-load.elを無視させます.

inits/.gitignore
*
!*.el
!.gitignore
99_local-init-load.el

local-inits/

gitで管理しないローカルなelispを格納します. こちらもelispをinit-loader-loadでロードするので, 数字2文字で始まるというファイル名の形式を守る必要があります. 無論このディレクトリの名前自体はサイト毎に自由に決められます.

運用

最初に書いたようにpushしてpullしてemacsを起動するだけです. 何か問題が発生する場合は, init-loader-loadのロード順序は適切か, 特にパッケージが適切な順番でロードされているか確認してみてください.

他にuse-package(Qiita記事)などもパッケージの管理を容易にしてくれるのでおすすめです.


  1. 実際はここに書かないと上手く動作しないpower-lineとテーマのロードの記述がありましたが、省略しています.  

  2. これらのディレクトリやファイル名の形式は変更できます 

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7