search
LoginSignup
73

More than 5 years have passed since last update.

posted at

updated at

Go, Ruby, PythonでGNU GLOBAL(gtags)+α

global.png

概要

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.vimgtags.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の設定を特別にせずとも関数ジャンプができるようになります!

感動です。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
73