概要
GNU GLOBALへのPygmentsパーサー取り込みでソースコード読みが信じられないくらいに捗るはず
大変便利な機能が紹介されていたのでLinux版を書いてみました。(上記はMacです)
また最後にEmacs向けの設定も載せています。
GNU GLOBALインストール
最新バージョンはこちらからご確認ください。
Getting GLOBAL
homebrew or linuxbrew
brew install global
ソースインストール
VERSION=6.4
wget http://tamacom.com/global/global-${VERSION}.tar.gz
tar xvf global-${VERSION}.tar.gz
cd global-${VERSION}
./configure
make
make install
GNU GLOBAL設定
cp /usr/local/share/gtags/gtags.conf /etc/
今回はgtags.confを修正する必要がありませんが、pygments-parser.laのパスが異なる場合には適宜修正してください。
GNU GLOBALの設定をユーザごとに指定したい場合はgtags.conf
を$HOME/.globalrc
に配置することで設定を上書き可能です。
Pythonのインストール
Linuxの場合はほとんどのディストリビューションで予めインストールされていると思います。
インストールされていない場合は各ディストリビューションのパッケージマネージャからPythonをインストールしてください。
私はPython 2.6.6で動作確認をしています。
pipのインストール
pipはPythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システムです。
curl -kL https://bootstrap.pypa.io/get-pip.py | python
Pygmentsのインストール
Pygmentsは様々な言語に対応したシンタックスハイライターです。
pip install pygments
動作確認
タグの生成とタグの参照はこちらをご参考ください。
GNU GLOBALへのPygmentsパーサー取り込みでソースコード読みが信じられないくらいに捗るはず
私の手元で確認した限りRuby, Python,Goすべてでタグの生成は成功しましたが、global
コマンドを用いたGoのタグの参照だけがうまくいきませんでした。
(実行しても何も標準出力されません)
しかし下記のhelm-gtagsからはGoのタグの参照が成功するので、global
コマンドからのタグの参照だけがうまくいかない模様です。
コマンド、Vim, EmacsからのGNU GLOBAL利用方法
gtags.vim
とgtags.el
は/usr/local/share/gtags/
に存在します。
ll /usr/local/share/gtags/gtags.{vim,el}
-rw-r--r-- 1 root root 36494 Sep 17 19:50 /usr/local/share/gtags/gtags.el
-rw-r--r-- 1 root root 16170 Sep 17 19:50 /usr/local/share/gtags/gtags.vim
+α for Emacs
上記ではgtags.elが紹介されていますが、より便利なhelm-gtags.elを紹介します。
Emacs 24.3,helm, helm-gtags,go-modeをインストールしてください。
helm-gtagsについてはこちらを参照ください。
helm-gtags - Emacs JP
(require 'helm-gtags)
(add-hook 'go-mode-hook (lambda () (helm-gtags-mode)))
(add-hook 'python-mode-hook (lambda () (helm-gtags-mode)))
(add-hook 'ruby-mode-hook (lambda () (helm-gtags-mode)))
(setq helm-gtags-path-style 'root)
(setq helm-gtags-auto-update t)
(add-hook 'helm-gtags-mode-hook
'(lambda ()
(local-set-key (kbd "M-g") 'helm-gtags-dwim)
(local-set-key (kbd "M-s") 'helm-gtags-show-stack)
(local-set-key (kbd "M-p") 'helm-gtags-previous-history)
(local-set-key (kbd "M-n") 'helm-gtags-next-history)))
あとはEmacsを起動して対象にカーソルを合わせてM-gで関数ジャンプが出来ます。
ページトップの画像はEmacs + helm-gtagsでGoのタグを参照しているところです。
これでPython, Ruby, Goどれでもgtagsコマンドさえ1度実行しておけばEmacsの設定を特別にせずとも関数ジャンプができるようになります!
感動です。
参考
- GNU GLOBALへのPygmentsパーサー取り込みでソースコード読みが信じられないくらいに捗るはず
- Pygments を利用して GNU GLOBAL の対応言語を大幅に増やす | あるエンジニアの情熱
- [helm-gtags + go - Life is very short]
(http://d.hatena.ne.jp/syohex/20140915/1410791973)