久しぶりに、Emacsの設定などを見直しました。
- Emacs Mac Portにした
- package.elで起動時にインストールするようにした
- el-getを使うようにした
- init-loaderを使うようにした
Emacs Mac Port
山本光晴氏によるいろいろなパッチを当てられたEmacsで、バイナリもあります。
入れたらいろいろ幸せになれるらしいので入れてみました。 導入後、すぐにMetaとOptionを入れかえました。
いろいろな変更があるっぽいですが、個人的に一番嬉しいのはスワイプスクロールが滑らかになる点。
init-loader
Qiitaエントリを参考にして、init-loaderを導入しました。
上記エントリのコメントを参考に、起動時に (必要なら) パッケージを初期化しつつinit-loaderをパッケージから導入するようにしています。
(require 'package) (package-initialize) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (my:package-install-if-needed 'init-loader) (require 'init-loader) (init-loader-load (expand-file-name "~/.emacs.d/conf.d"))
なお、環境ごとのプレフィックスは、99foobar.elみたいなのよりも後に読み込まれてしまうのと、「これ以外の環境」みたいなのが書けないので利用せずにsystem-type
とかで自力で判定しています。
marmaladeはデータの取得が遅すぎたので利用していません。
package.elとパッケージ削除
package.elについても上記のQiitaエントリを参考にしています。
個人的にはリストにないパッケージは自動で削除して欲しかったので、そのコードを追加しています。
(defvar installing-package-list '( anzu ; volatile-highlights )) (let ((not-installed-packages (loop for x in installing-package-list when (not (package-installed-p x)) collect x)) (not-listed-packages (cl-nset-difference package-activated-list (my:package-all-dependencies installing-package-list)))) (when not-installed-packages (package-refresh-contents) (dolist (pkg not-installed-packages) (package-install pkg))) (when not-listed-packages (my:require 'pkg-info) (dolist (pkg not-listed-packages) (let* ((pkgs (format "%s" pkg)) (ver (pkg-info-package-version pkg)) (vers (pkg-info-format-version ver))) (package-delete pkgs vers)))))
今のところ、次のような問題があります。
- パッケージの自動アップデートがない
- パッケージを特定バージョンでピンできない
- コンパイル時にファイル開きすぎエラーになることがある
パッケージの自動アップデートについては、次の設定ファイルでは起動時に1週間以上経っていたら自動でパッケージ更新する機能を実装しているようなので、機能追加したいところ。
上記リポジトリはパッケージ一覧取得関連のコードを書くときにも参考にさせていただきました。
el-get
el-getはddskkとneotreeを入れるためだけに利用しています。
GitHubリポジトリならパッケージとしてインストールするのも難しくありません。
(add-to-list 'load-path "~/.emacs.d/el-get/el-get") (require 'el-get) (setq el-get-dir "~/.emacs.d/el-get") (setq el-get-sources '((:name neotree :type github :pkgname "jaypei/emacs-neotree"))) (el-get 'sync '(neotree))
package.elでは入れられないものでもel-getで入れられたりするので、package.elの補完的なものだと思うと割と便利な気がします。
ちなみに、el-getはWindowsだと導入がわりと面倒だったりするので、el-getはgitのサブリポジトリとして入れています。
おすすめパッケージ
次の2つの記事を参考にして、パッケージをいくか導入したりしました。
上記の記事内でお勧めなのは、yankの場所がハイライトするようになるvolatile-highlights.elです。
この2記事にないお勧めパッケージとしては次の2つがあります。
2014.08.22 追記
C-u 0 C-;
でマッチ範囲を関数内に限定できるので、下で紹介している方法よりも、そちらのほうが便利かもしれません。
narrow-or-widen-dwimはnarrowingをトグル操作にしてくれるパッケージで、ieditは以前に紹介した同じキーワードを同時に編集するパッケージです。
この2つを組み合わせると、メソッドでの変数名の変更なんかも次のように簡単にできます。
上のgifは変数p
をparticles
に変更する例です。
メソッド内でリージョン選択していないならnarrow-or-widen-dwim
はnarrow-to-defun
を実行します。そこからieditで変数名をインタラクティブに変更します。最後に再びnarrow-or-widen-dwim
すると、narrowing中なのでwiden
されます。
さらに、expand-regionと組み合わせると、ブロック内での変数名の変更を行うこともできます。 まあ、範囲選択はShift-矢印のほうが楽かもしれませんが。
Caskを使っていない理由
EmacsはMacとWindowsで利用しています。
なので、CaskはWindowsで利用するのがちょっと面倒だったので諦めました (最近出たCask v0.7.1だと大丈夫かも)。
まとめ
Emacsの設定は次のリポジトリにありますので、ご自由にどうぞ。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。