gnu global と pygments の導入
gnu global (gtags) のサポートしている言語が増えたことを知った。正確には Pygments という python の syntax higlighter を利用してパースするプラグインが追加されたらしい。というわけで改めてインストールと設定を行った。
gnu global ができること
- 関数の定義元にジャンプする
- その関数を参照している場所にジャンプする
- 変数などの名前を元にジャンプする
など。ネイティブでは C, C++, Yacc, Java, PHP4 and assembly
しかサポートされていないが、前述のように Pygments を使ったプラグインによって他の言語も対応できるようになった。(とはいえ 結構前から だけど)
インストール
brew install global --with-exuberant-ctags --with-pygments
だけで OK
設定
emacs から使う。
まずは global についてくる gtags.el
を load-path が通ったところに置く。デフォルトでは /usr/local/Cellar/global/6.4/share/gtags/gtags.el
などにあるはず。
cp /usr/local/Cellar/global/6.4/share/gtags/gtags.el ~/.emacs.d/elisp/
つぎに .emacs
に以下を記述
(setq gtags-prefix-key "\C-c")
(require 'gtags)
(require 'anything-gtags)
(setq gtags-mode-hook
'(lambda ()
(define-key gtags-mode-map "\C-cs" 'gtags-find-symbol)
(define-key gtags-mode-map "\C-cr" 'gtags-find-rtag)
(define-key gtags-mode-map "\C-ct" 'gtags-find-tag)
(define-key gtags-mode-map "\C-cf" 'gtags-parse-file)
(define-key gtags-mode-map "\C-cb" 'gtags-pop-stack)))
(add-hook 'c-mode-common-hook
'(lambda()
(gtags-mode 1)))
defined-key
のあたりはキーバインドの指定で、add-hook
は tags-mode
を有効にするモードの指定。それぞれ必要に応じて変更する。
基本的にはこれでいいが、anything-gtags.el なども追加でインストールしておくと便利かもしれない。
簡単な使い方
gtags
コマンドで事前にインデックスを作る。ネイティブでサポートしている言語であればオプションなしで良いが、そうでないなら以下のようにする。
gtags --gtagslabel=pygments
これで GPATH
、GRTAGS
、GTAGS
というファイルが生成される。
次に該当の読みたいコードを emacs で開く。C-c s
で定義元へジャンプする。引数を与えなければ、カーソルのある位置の関数名で検索する。同様に、C-c r
で参照元へ飛ぶ。ジャンプ前の位置に戻るには C-c b
。という感じ。
注意点
pygments プラグインを使ったインデックス作成処理は時間がかかる。自分の場合、iconv-lite というモジュールの古いバージョンにある big5.js という大きな json を含むファイルのパースが一向に終わらなかった。
また言語によってはパースがうまくいかないものもあるらしい。もとがそもそもシンタックスハイライトのためのモジュールなので仕方ない部分がある。
技術評論社
売り上げランキング: 48,654