1. Qiita
  2. 投稿
  3. Go

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

  • 59
    いいね
  • 0
    コメント

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

感動です。

参考

Comments Loading...