最近の自分のEmacs設定 (package整理、helmへの移行など)

最近ずっとEmacs設定いろいろ弄りたい期に入っていて、長らく放置していたdotfilesをちょいちょい変えていっている。

packageとinit-loader

いまのinit.elはこんなかんじ。

(eval-when-compile (require 'cl))

;; package.el setting
(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/") t)
(package-initialize)
;; install if not installed
(defvar my-package-list
  '(auto-async-byte-compile
    auto-complete
    cperl-mode
    direx
    helm
    helm-ag
    helm-descbinds
    helm-ls-git
    init-loader
    js2-mode
    magit
    markdown-mode
    open-junk-file
    recentf-ext
    ruby-mode
    yasnippet))
(let ((not-installed
       (loop for package in my-package-list
             when (not (package-installed-p package))
             collect package)))
  (when not-installed
    (package-refresh-contents)
    (dolist (package not-installed)
      (package-install package))))

;; init loader
(require 'init-loader)
(custom-set-variables
 '(init-loader-show-log-after-init nil))
(init-loader-load)

;; after init
(add-hook 'after-init-hook
  (lambda ()
    ;; split window
    (split-window-horizontally)
    ;; show init time
    (message "init time: %.3f sec"
             (float-time (time-subtract after-init-time before-init-time)))))

dotfiles/init.el at 416f7b23ed2cb8de40d4b04644491f81728e9dbb · sugyan/dotfiles · GitHub


auto-installやel-getなども使わず、標準のpackage.elのみで賄う。
起動時に必要なpackageをチェックし、installされていない場合のみelpaからinstall。
その他の各種設定はinit-loaderを使って~/.emacs.d/inits以下に。
init-loader.el と package.el を導入して快適 Emacs ライフ - Qiita を参考にしています。

anythingからhelmへの移行

ずっとanything を使ってきていたけど、いいかげんhelm に移行しよう、ということで ようやく。
package-installしたものを使いつつ、自分なりの設定はこんなかんじで。

;;; helm
;; (package-install 'helm)
(require 'helm)

;; customize
(progn
  (require 'helm-ls-git)
  (custom-set-variables
   '(helm-truncate-lines t)
   '(helm-buffer-max-length 35)
   '(helm-delete-minibuffer-contents-from-point t)
   '(helm-ff-skip-boring-files t)
   '(helm-boring-file-regexp-list '("~$" "\\.elc$"))
   '(helm-ls-git-show-abs-or-relative 'relative)
   '(helm-mini-default-sources '(helm-source-buffers-list
                                 helm-source-ls-git
                                 helm-source-recentf
                                 helm-source-buffer-not-found))))

;; set helm-command-prefix-key to "C-z"
(progn
  (require 'helm-config)
  (global-unset-key (kbd "C-z"))
  (custom-set-variables
   '(helm-command-prefix-key "C-z")))

;; key settings
(global-set-key (kbd "C-q") 'helm-mini)
(global-set-key (kbd "M-x") 'helm-M-x)
(global-set-key (kbd "M-y") 'helm-show-kill-ring)
(global-set-key (kbd "C-x C-f") 'helm-find-files)
(global-set-key (kbd "C-x C-b") 'helm-buffers-list)
(define-key helm-command-map (kbd "d") 'helm-descbinds)
(define-key helm-command-map (kbd "g") 'helm-ag)
(define-key helm-command-map (kbd "o") 'helm-occur)
(define-key helm-command-map (kbd "y") 'yas/insert-snippet)
(define-key helm-command-map (kbd "M-/") 'helm-dabbrev)

(define-key helm-map (kbd "C-h") 'delete-backward-char)
(eval-after-load "helm-files"
  '(progn
     (define-key helm-find-files-map (kbd "C-h") 'helm-ff-backspace)
     (define-key helm-find-files-map (kbd "C-i") 'helm-execute-persistent-action)))

dotfiles/11-helm.el at 416f7b23ed2cb8de40d4b04644491f81728e9dbb · sugyan/dotfiles · GitHub

一番よく使うhelm-miniを、global-set-keyでC-qに割り当て。その他のものとしてC-zをhelm-command-prefix-keyに。M-xC-x C-fなどは元のものと完全に置き換え。
検索にはhelm-occurの他、helm-ag を使わせていただいています。<helm-command-map>-iで使えるhelm-semantic-or-imenuとかもすごく便利。

その他helmに関する各customizeとしては、candidatesが無駄に改行しないようにhelm-truncate-linesをtにしたり、C-kでminibufferがクリアされないようにhelm-delete-minibuffer-contents-from-pointをtにしたり。minibufferでC-hでのdelete-backward-charが効かないのは有り得ないので当然のように上書き。などなど。

helm-ls-gitを入れてhelm-mini-default-sourcesに加えているのは、なにげにすごく便利。


で、あと困ったのは今までずっと使ってきていたperl-completion がanything依存のため使えない、ということ。まぁもともとそこまでヘヴィに使ってきていなかったし、とりあえずは無しで大丈夫かな、と。ドキュメントはひきたいのでhelm-perldoc を使ってみようかと検討していたりします。


その他は最初は多少違和感あったものも慣れてだいぶ馴染んできている。
「これオススメ!」などあれば教えていただきたいです。