anything.elのインターフェイスを使い、EmacsにPHPの補完を実装するマイナーモード php-completion.el をリリースしました。
インストール・設定・補完のスクリーンキャストは以下です。
php-completion.el DEMO from imakado on Vimeo.
出来る事
- visual studioやEclipseライクなポップアップ補完
- anything.elのインターフェイスを使った補完
- GNU Globalの作ったTAGSファイルから補完候補を自動収得
- etags,ctagsで生成したTAGSファイルから補完候補を収得
- php.netでのドキュメントの検索
インストール方法
php-completion.elのインストール方法を書きます。 スクリーンキャストと併せてご覧ください。
以下のElispが動作に必要です。anything.el,auto-complete.elは、2009/3/10の時点でダウンロードできる最新版を使ってテストしたので、既にインストールされている方も新しいバージョンのインストールが必要になる場合があります。
- anything.el
- anything-match-plugin.el
- auto-complete.el
- php-completion.el
たくさんのファイルをインストールしなければならないので、普段、EmacsにElispをいれない人にとって大変な作業の用に見えるかもしれませんが、そんなことはありません。
install-elisp.elを使用する事によって、Elispをダウンロードしてインストールする事が非常に楽に行えます。 また、install-elisp.elを使用すると、インストールしたElispをアップデートする事も楽になります。
以下に、上記のElispが何もインストールされていない方を対象に、install-elispを使用したインストール方法を書きます。 Elispのインストールに慣れている方は、上記のリストにあるElispをインストールして、設定方法の項目まで読み飛ばしていただいて問題ないです。
install-elisp.elのインストール
http://www.emacswiki.org/cgi-bin/wiki/download/install-elisp.el からダウンロードして、load-pathの通った場所に配置します。 次に .emacs に次の設定を追記します
(require 'install-elisp)
(setq install-elisp-repository-directory "/path/to/your/elisp/directory")
/path/to... の部分はinstall-elispを使用してインストールしたElispの保存先ディレクトリを設定します(デフォルトは、 "~/.emacs.d/" です) これで、次回起動時よりinstall-elispが使用できるようになります。
再起動せずに使う場合は、
M-x load-file ~/.emacs
を実行して~/.emacsファイルをリロードするか、設定を C-x C-e で評価してライブラリを読み込む必要があります。
EmacsへのElispのインストール方法がわからない場合は、以下の記事に非常に丁寧な解説がありますので参考になると思います。同記事にinstall-elispを使用したElispのインストール方法についての記述もあります。 http://d.hatena.ne.jp/tomoya/20090121/1232536106
install-elisp.elを使ってphp-completion.elをインストールする
install-elispが使えるようになったら、他のElispのインストールは非常に楽です。 以下のコマンドを実行すれば、php-completion.elのインストールが完了します。 実際にインストールする動作がスクリーンキャストに含まれているので、あわせてご覧ください。
M-x install-elisp-from-emacswiki anything.el -> C-c C-c
M-x install-elisp-from-emacswiki anything-match-plugin.el -> C-c C-c
M-x install-elisp-from-emacswiki auto-complete.el -> C-c C-c
M-x install-elisp-from-emacswiki php-completion.el -> C-c C-c
設定
インストールが済んだら、.emacsに設定をします。 php-completionは、php編集時にマイナーモードとして動作するため、設定は以下のようになります。
(add-hook 'php-mode-hook
(lambda ()
(require 'php-completion)
(php-completion-mode t)
(define-key php-mode-map (kbd "C-o") 'phpcmp-complete)
(when (require 'auto-complete nil t)
(make-variable-buffer-local 'ac-sources)
(add-to-list 'ac-sources 'ac-source-php-completion)
(auto-complete-mode t))))
この設定の場合、phpプログラムの編集中に C-o(コントロールを押しながらo) で補完コマンドを起動するようになります。(キーバインドを変更したい場合は、 (kbd "C-o") の部分をお好みのキーに書き換えてください) また、auto-complete.elを利用したポップアップ補完も有効になります。
以降の使い方の解説は、上記の設定をした前提で書きます。キーバインド等は設定した内容に適度読み替えてください。
使い方
補完
php-completionのメインの機能は、anything.elのインターフェイスを利用した補完です。 phpプログラム編集中に C-o を押すと補完が起動します。 この状態で文字を入力すると、インクリメンタルに候補が絞り込まれて行くので、候補を絞り込んだ後、C-n C-pで候補を選択し、enter(C-m)で選択して文字を挿入します。
この一連の流れが、通常の補完の動作になります。
ドキュメント検索
補完と同じように候補を絞り込んだ後に TAB を押すと、候補に対するアクションが選択できます。 Searchを選択すると、候補をphp.netで検索してブラウサで開きます。
ブラウサで開く動作は、phpcmp-browse-function 変数を変更することでカスタマイズする事が可能です。
その他
emacs関連のircチャンネル
最近、#emacs-lisp-ja と #emacs-ja がfreenodeに作られました。 ircをやっている方は、気軽にjoinしてください!!
anything.elについて
anything.elは、2007年頃にTamas Patrovicsさんが開発し、2008年からrubikitchさんがメンテナンスをしているEmacs拡張で、2009年03月現在活発に開発されています。
非常に柔軟で強力な候補選択フレームワークで、2009年03月現在emacswikiにたくさんの拡張やTipsがあります。
コードも非常に綺麗に書かれており、テストもよくされていている拡張なので、emacs lispに興味のある方はソースを読むと新しい発見があるかもしれません。
php-completion.elでも候補の絞り込み・選択をする部分はanything.elのインターフェイスを利用することで、自前で実装するより強力に、かつコード量を少なくすることができました。
関連リンク
auto-complete.elについて
従来、Emacsにはvisual studioやEclipse等のIDEによくあるポップアップ補完がありませんでしたが、2008年11月にmatsuyamaさんが、auto-complete.elを書いた事で実現しました。
php-completion.elでは、auto-complete.elとの連携のために ac-source-php-completion という名前のソースを提供します。
関連リンク