読者です 読者をやめる 読者になる 読者になる

PHPで GNU globalを使う

emacs php global

http://d.hatena.ne.jp/ikstrm/20121025/1351126600


上記のサイトでは gtagsは使いづらく、grep等の紹介をしています。
素の gtags.elを使うのであればそれでもいいかもしれないですが、
helmや anythingと組み合わせて使えば間違いなく grepよりも
良いと思います。そこで拙作の helm-gtags.elを導入から紹介します。

注意

私は PHPについては hello worldしか書いたことがないので
より良いリーディング方法があれば教えていただくか、
ブログで紹介いただけたらと思います。

追記
  • GNU globalは PHP4の対応らしい
  • 古い GNU globalを使うと使えないみたいなので新しいのを使う方がよい(以下では6.24を利用)

package.elを使う

helm-gtags.elは MELPAに登録しているので package.elを使って
簡単にインストールすることができます。


以下を設定ファイル(~/.emacs.d/init.el, ~/.emacs等)に記述します。

;; インストール先を変えたい場合は package-user-dirを変更してください
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(package-initialize)


次に以下を実行します。

  M-x package-list-packages

すると以下のような画面になります。


ここから helm-gtagsを探し, その位置で "i"(install)を押します。

そして "x"を押し、インストールを行います。

PHP向けの設定

PHPモードも package.elでインストールできますので同様に
インストールしてください。


php-mode時に helm-gtags-modeを有効にするために以下を
設定ファイルに追加します。

(add-hook 'helm-gtags-mode-hook
          '(lambda ()
             (local-set-key (kbd "M-t") 'helm-gtags-find-tag)
             (local-set-key (kbd "M-r") 'helm-gtags-find-rtag)
             (local-set-key (kbd "M-s") 'helm-gtags-find-symbol)
             (local-set-key (kbd "C-t") 'helm-gtags-pop-stack)))

(add-hook 'php-mode-hook 'helm-gtags-mode)

hookのキーバインドは私好みですので、ご自由にしてください。

関数、クラスの定義元の検索

関数やクラス等の定義位置を調べるコマンドは helm-gtags-find-tagです。
実行すると以下のようになります。

関数、クラスの参照元の検索

参照している場所を調べるコマンドは helm-gtags-find-rtagです。

シンボルの検索

シンボルを検索するコマンドに helm-gtags-find-symbolがあります。
画像は割愛

ジャンプ元に戻る

定義場所、参照場所にジャンプして、その後ジャンプ前の場所に
戻りたいということがあります。そのようなときには
helm-gtags-pop-stackコマンドを使います。

おまけ

grepについてもそのまま使うより、helmや anythingと組み合わせて
使うのがやはり強力です。ついでにいうと grepより ackが強力です。
ack(App::ack)のインストールは他にお任せするとして、helm
インタフェースで ackを使える拙作の helm-ack.elを紹介します。

リポジトリ

helm-ackは anything-ackと大きく異なることや、ackに関する
拡張に比べて機能がなさすぎるので MELPAの登録は保留中です。
下記から手動でインストールしてください

https://github.com/syohex/emacs-helm-ack

イメージ



デフォルトではカーソル下の単語を検索候補とすることや
現在開いているファイルに関連したファイルのみを検索する
オプションを自動で追加するようしています。


私がカーネルの開発を行う際は helm-gtags.elと helm-ack.elを
使い分けながら作業を行なっています。

おわりに

個人的にはEmacsに慣れていない人ほど helmとか anythingを
使って欲しいと思っています。操作も覚えるのも大事ですが、
初めから積極的に便利な機能を使う、それを使いこなすという
ことをしていくことでより体に馴染んでいくのではないかと
思います。