emacs lisp でよりよいコーディングを

ようやく社員紹介ページができました。nagata (@handlename) です。

先日の @soh335の記事に感化されて emacs 版を書いてみました。章立てはだいたい同じになってます。

※ elisp = emacs lisp

elispの管理

auto-install.el

URLから elisp を直接インストールすることができます。

.emacs にはこんな設定を書いておきます。

(require 'auto-install)
(add-to-list 'load-path auto-install-directory)
(auto-install-update-emacswiki-package-name t)
(auto-install-compatibility-setup)
(setq ediff-window-setup-function 'ediff-setup-windows-plain)

設定後、次のようにすると elisp をインストールします。

M-x install-elisp http://example.com/hogehoge.el

Emacs Wiki や gist からインストールすることもできます。

M-x install-elisp-from-emacswiki hogehoge.el
M-x install-elisp-from-gist <gist ID>

実行後、ダウンロードされた elisp が表示されるので、 C-c C-c とすればバイトコンパイルされて保存されます。

init-loader.el

.emacs の分割を支援する elisp です。

指定ディレクトリ内にある複数の設定ファイルをいい感じに読み込んでくれます。 以前本ブログに投稿した記事を参照してみてください。

コードを書くその前に

info-mode

info-mode で様々なドキュメントを引ける、のですが、使ってないのでリンクだけ・・・。

anything.el

ファイルオープン、コマンド実行、バッファ検索など、 異なる操作を一つのインターフェイスにまとめてくれます。

日本語の解説は開発者である rubikitch さんのエントリが詳しいです。

たとえば anything-c-moccur-occur-by-moccur を anything のソースとして設定して、 この記事の原稿を "emacs" で検索した場合。

emacs-coding-anything.png

世界、変わります。

いざコーディング

flymake.el

現在のバッファのコードを随時チェックして、エラーがある部分をハイライトしてくれます。 実行せずとも問題のある箇所がわかるので超絶便利です。 Emacs22 以降なら最初から入っています。

こんな感じでエラー箇所が表示される。

emacs-coding-flymake.png

言語毎に設定して使います。

auto-complete.el

入力中にインクリメンタルに補完候補を表示してくれます。

emacs-coding-auto-complete.png

候補表示中に C-s とすれば候補内からさらに検索してくれて便利です。

yasnippet.el

スニペット機能を提供します。

前述の auto-complete の補完候補の中に含められるので、 予備動作なしに使うことができます。

たとえば、PHPのfunction。

# -*- mode: snippet -*-
# name: public function name(...) { ... }
# --
/**
 * ${1:description}
 *
 * @param
 * @return
 */
public function ${2:name}(${3:params})
{
    $4
}

こんな感じにコメントまでスニペット中に含めておけば、 コメントを書く習慣が付くんじゃないかと思います。

anything-etags.el、anything-gtags.el

etags と gtags をつかって、プロジェクト中の関数その他にジャンプできます。

anything-etags.el と anything-gtags.el は、 タグ検索を anything のインターフェイスを使って表示するためのものです。

いちいちドキュメントを引くよりもソースをみた方が速いことは多々ありますが、 タグジャンプを使うとこの作業が劇的に楽になります。 find と grep を駆使してソースの森をさまよう必要はなくなります。

↓ symfony のプロジェクトディレクトリで候補を表示したところ

emacs-coding-gtags.png

もうこの機能がないと巨大なフレームワーク(symfonyとか)を使う気になれません。

etags と gtags の説明はこちらを参照。

auto-complete-etags.el

auto-complete-etags.el はタグファイルに登録された関数その他を auto-complete の補完リスト中に表示してくれます。 予約語以外の、プロジェクトに固有な関数なども表示してくれます。

symfony.el

ほとんど使いこなせてない・・・。

おわり

えー。勢いで書いたらただのまとめ記事になってしまいました・・・。 vim でできることは emacs でもできるよ、っていう、そういうことです(逆も然り)。

カヤックでは、エディタが好きでしょうがない技術者も募集しています!