最近ずっと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-x
やC-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 を使ってみようかと検討していたりします。
その他は最初は多少違和感あったものも慣れてだいぶ馴染んできている。
「これオススメ!」などあれば教えていただきたいです。