研究会とか諸々で忙しかったため,久しぶりの更新.Emacsの設定をしたので自分用にメモ.
やったことは…
- 基本設定
- Caskを導入してのパッケージ管理
1. インストール
emacsのインストール.前回やった.
homebrewでemacsをインストールしたため,インストール先は/usr/local/Cellar
にある.Emacs.app
をAppフォルダに移動しておく.
2. ディレクトリ構成
まず,ホームディレクトリがどこか確認する.Emacsを立ち上げてC-x C-f
で~/
を指定すれば分かる.
ホームディレクトリに,設定を保存するための.emacs.d
フォルダを作成する(自動生成されている場合もある).下記のサイトを参考にすると.
Emacs22以降は,~/.emacs.d/
以下に設定ファイル群をまとめておくと便利だそう.このサイトはいろいろ作っているけど,よくわからないので最低限のものだけ作成する.とりあえず,inits
フォルダとinit.el
ファイルを作成する.それぞれの役割は以下.
- init.el
- Emacsの初期化ファイル
- ウインドウの大きさ,フォントの種類とか
- elispパッケージの読み込みとか
- inits
- 各種設定ファイルをおく
- init-loaderの項で説明する
3. 設定を書く
下記サイトをとりあえず参考に.
うわっ…私のEmacs、使いにくすぎ?だったら…カスタマイズシヤッセー!!ダァダァシエリイェッスッシェーショーヘイヘイ!!!
3.1 load-pathの設定
いろいろなライブラリを利用できた方が便利だ.EmacsのライブラリはEmacs Lispで記述されており,拡張子は.el
である.M-x load-library
を実行すると,load-path
に存在するライブラリが読み込まれる.
よって,このload parh
を設定しておく必要がある.load path
は変数load-path
として定義されているため,これを書き換えればよい.
初期化ファイルであるinit.el
に,以下を追記する.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
やり方はいろいろあると思うけど,関数として定義しておけば,追加が楽だ.
3.2 全体的な設定
途中フォントの設定があるが,Emacsで使用可能なフォント一覧は(font-family-list)
をscratchバッファ実行すれば良い.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
|
3.3 追記
上記のような設定をinit.el
にだらだらと書いたら,init-loader
なるものを見つけたので,後述する.また,init.el
に設定を追記したものの,ちゃんと機能しているかが不安というときは,式の後ろでC-x C-e
を実行するとlisp式を評価できるので,これで確認すると良い.
4. パッケージ管理
Emacsのパッケージ管理が必要となるが,どうやらいろいろあるようだ.
- package.elを使う
- Cask,Palletを使う
後者の方が便利らしい.よくわからないのでとりあえずどちらも見ておく.
4.1 package.el
Emacsのパッケージは,リポジトリにまとまって公開されている.
- GNU ELPA
- 公式のリポジトリ
- デフォルトではこれのみ利用可能
- MELPA
- 非公式のリポジトリ
- リポジトリに変更があるたびに更新されるため,最新版をインストール可能
上記のようなリポジトリを登録したのちに,インストールしたいパッケージを指定する,という流れになる.リポジトリ情報はpackage-archives
変数に格納されているので,新規に追加する場合はこれをいじる.以下が設定例.
1 2 3 4 5 6 7 |
|
指定したパッケージをインストールするには,M-x package-install
を実行する.更新はM-x package-refresh-contents
.
以上がパッケージをインストールする流れになるが,環境が変わった際にいちいちパッケージをインストールしなおすのは面倒.そこで,package.el
にインストールすべきパッケージを記載しておき,これを実行すれば同様の環境が構築できるようにしておく.
(package-installed-p package-name)
でpackage-name
がインストール済みかどうか確認できるため,これがnil
を返すようなパッケージについてインストールすれば,同様の環境が構築できる.package.el
に必要なパッケージを記述し(例は省略),M-x eval-buffer
を実行することでパッケージ群をインストールできる.便利.
4.2 Cask
package.el
は便利だなーと思ったけれど,最近だとCask
なるものを使うらしい.Cask
は,ざっくりいうとパッケージ管理システム.パッケージの依存関係をみながらライブラリを管理してくれる,のかな?
package.el
もライブラリの依存関係を考慮して必要ライブラリを一括でダウンロードできるが,個人の設定であるため~./emacs.d
にダウンロードするのが前提.
よって,ライブラリ開発で利用するのには向かない.Cask
は Cask ファイルに依存しているライブラリを記述することで,一括ダウンロードやPATH
,load-path
の調整をしてくれる.
4.2.1 Caskのインストール
1
|
|
4.2.2 Caskファイルの初期化
~/.emacs.d
(設定ファイルが置かれた場所)でcask init
.
Cask
というファイルができるため,今後このファイルでパッケージを管理する.
本ファイルには,すでにCaskオススメのパッケージが依存関係として記述されているので,これを好みに記述し直していけば良い.
4.2.3 Caskファイルの記述
source
パッケージリポジトリを指定する.
現状,gnu, melpa, marmalade, SC, orgが指定可能.
1 2 |
|
depends-on
インストールするパッケージをいろいろ書いていく.指定方法は以下が可能.
1 2 3 4 5 6 |
|
4.2.4 ライブラリのインストール
Cask
に記述されたライブラリがインストールされる.
1
|
|
4.2.5 インストールされたパッケージにパスを通す
cask.elをロードし,cask-initializeを呼ぶ.こうすることで,load-path,autoloadの設定を読み込んでくれる.
init.el
に以下を記述.
1 2 3 4 5 6 7 |
|
4.2.6 おまけ
とりあえず初期設定のままでパッケージをインストールした.暇なときに以下のサイトを見たりしておく.
Cask init して入ってくるライブラリ一覧 - 亀岡的プログラマ日記
Cask
Cask とは何であるのか、および init.el が非常にシンプルになった件
Emacs Lispのテスト、依存性管理、CI
package.elから Caskに切り替えました
5. init-loaderによる設定ファイルの分割
init-loader
は,指定したディレクトリ内のelファイルを読み込んでくれるelisp.それだけではなく,ファイル名を見て環境に合わせて読み込んでくれたり,エラーのあるファイルをスルーしてくれたりする.他にも,環境依存な設定を分離できたりするので便利.
5.1 init-loaderインストール
Caskを導入したので,利用してパッケージをいれる.Caskファイルにinit-loaderを追加.
1
|
|
インストール
1
|
|
アップデート
1
|
|
5.2 設定ファイル記述
inits
フォルダの中に設定ファイルを書いていく.ファイルは以下の設定に従って作成していく.
- 環境に依存しない設定はファイル名の最初に2けたの数字をつける
- 番号は優先度.00が最初,99が最後に読み込まれる
- 同じ数字も可
- 環境依存な設定は各環境のプレフィックスをファイル名の最初につける
プレフィックスは以下
環境 | prefix |
---|---|
Meadow | meadow |
Carbon Emacs | carbon-emacs |
Cocoa Emacs | cocoa-emacs |
emacs -nw | nw |
Windows | windows |
Linux | linux |
5.3 設定の反映
inits.el
に設定追記
1 2 3 4 5 |
|
C-x C-e
で評価してエラーがないか確かめたら,一度終了してemacs
コマンドでemacsを再起動.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
エラーがなく,inits内のファイルが呼び出されていることが確認できる.設定ファイルの分け方はまた考える.
.emacs分割のすゝめ
emacs-jp/init-loader
モダンなEmacsを求めて (3) init-loaderで設定ファイルを分割する
init-loader.el と package.el を導入して快適 Emacs ライフ
自分流の .emacs管理
6. 最終的に
Caskとinit-loaderを導入した.
ので,次はどのパッケージを導入するか?設定(と,その分割)をどうするか?を考える.
設定については,どんなものがあるのかわからないし,いろんな人の.emacs.dを参考にする.
shibayu36/emacs
shomah4a/.emacs.d
catatsuy/dot.emacs.d
gongo/elfactory
6.1 導入パッケージ
下記サイトを参考にいくつか
- init-loader
- いわずもがな
- auto-complete
- 字句保管機能
- バッファ内にある文字列を自動的に保管対象にする
- tabを押して選択
- popup
- emacsでpopupメニューを使う.auto-completeで使われている.
1 2 3
(require 'auto-complete) (require 'auto-complete-config) ; 必須ではないですが一応 (global-auto-complete-mode t)
- emacsでpopupメニューを使う.auto-completeで使われている.
- smartparens
- 括弧やクォート等の自動挿入・管理
1 2
(require 'smartparens-config) (smartparens-global-mode t)
- 括弧やクォート等の自動挿入・管理
- rainbow-delimiters
- 括弧の対応を色付けする
1 2 3 4 5
(require 'rainbow-delimiters) ;(add-hook 'clojure-mode-hook 'rainbow-delimiters-mode) (add-hook 'prog-mode-hook 'rainbow-delimiters-mode) ;(global-rainbow-delimiters-mode)
- 括弧の対応を色付けする
- helm
- 超絶便利らしいので勉強してみる
- ace-jump-mode
- 特定語句にジャンプする
- 練習が必要そう
smartparens.el での括弧処理
rainbow-delimiters.elの括弧色付けをデフォルトより強調する方法
「Emacsのトラノマキ」連載第09回「auto-completeを使おう」(松山智大)
7. おわりに
設定は奥が深いようだ.使いながら欲しい機能を探すのがいいだろう.あとは今回設定した中でも,気に入らない設定が出てくるかもしれない.落ち着いたら,設定はgithubで公開したい.
自作OSの方は8日目くらいまで進んでいるのだけど,まとめが終わっていない.明日はそちらをまとめることを目標にする.