2014/01/09
こんにちは。
エンジニアのGMです。
ここ1年ほどメインのテキストエディタとしてEmacsを使っています。SoftwareDesign2013年11月号の特集はEmacsでしたが、その中で中国ではEmacs使いがVimmerやSublimetext使いに比べて少ないといったことが書かれていました。独特のキーバインドや、カスタマイズにEmacs Lispを用いるということでなんとなくとっつきにくい印象があるのかもしれません。
しかし、何も恐れる必要はありません。私の設定ファイルはほとんど”(require hogehoge)”です(汗)今回はそんな私が使っているEmacsの便利な設定や拡張機能を紹介したいと思います。
なお使っているEmacsのバージョンは24.2です。
準備
拡張機能のインストールには基本的にEmacs用に準備されたパッケージマネージャを用います。下記設定の後、M-x package-list-packagesとするとインストール可能な拡張機能が表示されます。
|
1 2 3 4 5 6 7 |
;; packages (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (package-initialize) |
カラーテーマの設定
プログラマの方はテキストエディタのカラーテーマには何らかのこだわりがあるかと思います。私はマイルドな色のみからなるzenburnを使っています。
|
1 2 3 4 5 6 7 |
(add-to-list 'load-path "elisp/color-theme-6.6.0") (require 'color-theme) (require 'zenburn) (eval-after-load "color-theme" '(progn (color-theme-initialize) (color-theme-zenburn))) |
バッファに関する設定
細かいですが、あるのと無いのでは大違いのバッファに関する設定です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
;; バッファ内の表示 ;;行番号を常に表示 (global-linum-mode t) ;; 現在行と桁をハイライト (require 'crosshairs) (crosshairs-mode 1) ;; 対応する括弧を表示 (show-paren-mode t) ;; ミニバッファの表示 ;; directory 名を追加 (require 'uniquify) ;; filename<dir> 形式のバッファ名にする (setq uniquify-buffer-name-style 'post-forward-angle-brackets) ;; バッファの操作に関する設定 ;; "C-t" でウインドウを切り替える (define-key global-map (kbd "C-t") 'other-window) ;; C-x 3 で自動的にfollow-modeにする (global-set-key "\C-x3" 'follow-delete-other-windows-and-split) |
undo-tree mode
Emacsでは基本的にC-/でUndoとなります。タイポを修正するくらいであればそれで事足りますが、もう少し盛大にUndoしたい場合はundo-tree modeが便利です。
Gitのコミット履歴のように操作履歴が樹木状に表示されます。ある程度Undoした後に修正してみたものの、気に入らないので修正前に戻したいが、commitしていなかったなどという場合でも、これを使えば簡単に修正ができてしまいます。
|
1 2 3 |
(require 'undo-tree) (global-undo-tree-mode t) (global-set-key (kbd "C-x C-u") 'undo-tree-redo) |
テンプレートの挿入
言語によってはシバンなど、ソースコード内に決まった記述を行うことがしばしばあります。しかし毎回同じことを繰り返すのはプログラマの三大美徳の一つである怠惰に反します。そこでテンプレートを準備します。insertディレクトリを作っておき、さらにその下にphp-template.phpなるテンプレートファイルを置いておきます。このとき、以下のように設定するとテンプレートが使えるようになります。
|
1 2 3 |
(auto-insert-mode) (setq auto-insert-directory "~/.emacs.d/insert/") (define-auto-insert "\\.php$" "php-template.php") |
flymake-mode
プログラミングに文法ミスはつきものです。flymake-modeを使うことで文法ミスに気づきやすくなります。
|
1 2 3 4 5 6 |
;; 全体の設定 (require 'flymake) (eval-after-load 'flymake '(require 'flymake-cursor)) ;; PHP用の設定 (require 'flymake-php) (add-hook 'php-mode-hook 'flymake-php-load) |
quickrun
関数の挙動を確認したい時、サンプル用のsample.phpなどをローカルに持っておいて、それを書き換えては./sample.phpなどとしてもよいのですが、面倒です。quickrun-modeを使うとEmacsの中でプログラムを実行できて便利です。
|
1 2 |
;; quickrun (require 'quickrun) |
web-mode
私は主にPHPを書いているのですが、PHPの場合、一つのファイルの中でPHPとHTMLを書くことがあります。メジャーモードが異なっているとうまいことインデントされなかったり、シンタックスハイライトされなかったりと面倒なのですが、web-modeを使うことで解消されます。私の場合、CakePHPでの開発が多いので、ctpファイルを開いた場合にweb-modeになるように設定しています。
|
1 2 3 |
(require 'web-mode) (add-to-list 'auto-mode-alist '("\\.ctp\\'" . web-mode)) (setq web-mode-php-offset 4) |
emmet-mode
HTMLやCSSの記述をラクにしてくれるemmetですが、Emacsでもemmet-modeとして使えます。
|
1 2 3 4 5 |
(require 'emmet-mode) (add-hook 'sgml-mode-hook 'emmet-mode) (add-hook 'php-mode-hook 'emmet-mode) (add-hook 'emmet-mode-hook (lambda () (setq emmet-indentation 2))) (define-key emmet-mode-keymap (kbd "C-c C-j") 'emmet-expand-line) |
rainbow-mode
デザイナさんが入るほどでもないような社内システムなどの開発では、プログラマが簡単なCSSの調整を行うこともあるかと思います。その際、カラーコードが出てきて何色なのかわからず調べるということがあります。そんな面倒を解決してくれるのがこのrainbow-modeです。コード中に”skyblue”などの色を表す単語や”#00bbff”といった色コードがあると、その色でハイライトしてくれます。私の場合、css-modeの時にrainbow-modeが有効になるように設定しています。
|
1 2 |
;; css-mode (add-hook 'css-mode-hook 'rainbow-mode) |
最後に
私が使っている設定やプラグインの一部を紹介させていただきました。Web上ではもちろん、EmacsテクニックバイブルやEmacs実践入門といった書籍、冒頭で触れたSoftwareDesignなど、Emacsの情報は多くありますが、まだまだ便利な機能を使いこなせていないことを実感しています。テキストエディタは毎日使うものですので、ほんの少しのカイゼンが月単位、年単位で見た時に大きな効果をもたらすはずです。もっと積極的に新たな設定やプラグインを取り入れたいものです。