GNU Global
- http://www.gnu.org/software/global/download.html
- glo651wb.zip (Version 6.5.1)
- インストール先 C:\Installed\GnuGlobal\
- パス追加: C:\Installed\GnuGlobal\bin
- コマンド: gtags, htags, global
使い方
$ cd src-of-FOO
$ gtags -vw
[Thu Dec 03 20:04:19 東京 (標準時) 2015] Gtags started.
Using default configuration.
[Thu Dec 03 20:04:19 東京 (標準時) 2015] Creating 'GTAGS' and 'GRTAGS'.
[1] extracting tags of ...
[2] extracting tags of ......
[24] extracting tags of ...
[Thu Dec 03 20:04:19 東京 (標準時) 2015] Done.$ ls G*
GPATH GRTAGS GTAGS$
生成されるG*ファイルはバイナリ。
$ htags -sanovw... イッパイ色々
[21/24] converting ...
[22/24] converting ...
[23/24] converting ...
[24/24] converting ...
[Thu Dec 03 20:07:28 東京 (標準時) 2015] Done.$ ls HTML
./ FILEMAP R/ defines/ files.html mains.html
../ I/ S/ defines.html help.html rebuild.sh*
D/ J/ Y/ files/ index.html style.css$ s HTML/index.html
$
これでHTMLでソースを見られる。コマンドのヘルプは、--helpまたは-h。
設定ファイル
- ~/.globalrc
emacs helm
help-Gtags-Mode については、
先ほどphp-modeとruby-modeにhelm-gtags-modeをホークしたので、Rubyファイルを開くと自動でhelm-gtags-modeが起動します。
ホークって何だ? hook、フックだろうね。
M-x el-get-list-packagesでhelm-gtagsを探してインストールはした。そのとき次の警告。
Warning (el-get): The package `helm' has already been loaded by package.el, attempting to load el-get version instead. To avoid this warning either uninstall one of the el-get or package.el version of helm, or call `el-get' before `package-initialize' to prevent package.el from loading it.
el-getとpackage.elでパッケージが重複しているようだ。ウーン、この問題があるのがイヤだなー。package.elをやめるか。
上記の記事からスニペットは、
(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 "M-l") 'helm-gtags-select) ;;ジャンプ前の場所に戻る (local-set-key (kbd "C-t") 'helm-gtags-pop-stack))) (add-hook 'php-mode-hook 'helm-gtags-mode) (add-hook 'ruby-mode-hook 'helm-gtags-mode)
プログラミング言語xxxのモードの xxx-mode-hook に 'helm-gtags-mode を add-hookすればいいのか。すると、helm-gtags-modeが起動する。このときのフックとしてさらにローカルキーバインディングを設定する、と。C++なら、(add-hook 'c++-mode-hook 'helm-gtags-mode) 。
しかし、キーバインディングがかぶっている! ローカルだから上書きってことか?
(add-hook 'helm-gtags-mode-hook '(lambda () ;;入力されたタグの定義元へジャンプ (local-set-key (kbd "M-t") 'helm-gtags-find-tag); transpose-words ;;入力タグを参照する場所へジャンプ (local-set-key (kbd "M-r") 'helm-gtags-find-rtag) ; move-to-window-line-top-bottom ;;入力したシンボルを参照する場所へジャンプ (local-set-key (kbd "M-s") 'helm-gtags-find-symbol) ; prefix key ;;タグ一覧からタグを選択し, その定義元にジャンプする (local-set-key (kbd "M-l") 'helm-gtags-select) ; downcase-word ;;ジャンプ前の場所に戻る (local-set-key (kbd "C-t") 'helm-gtags-pop-stack) ;transpose-chars ))
かぶらないキーバインディングの一例。
(add-hook 'helm-gtags-mode-hook '(lambda () ;;入力されたタグの定義元へジャンプ (local-set-key (kbd "C-c C-t") 'helm-gtags-find-tag); ;;入力タグを参照する場所へジャンプ (local-set-key (kbd "C-c C-r") 'helm-gtags-find-rtag) ;;入力したシンボルを参照する場所へジャンプ (local-set-key (kbd "C-c C-s") 'helm-gtags-find-symbol) ;;タグ一覧からタグを選択し, その定義元にジャンプする (local-set-key (kbd "C-c C-l") 'helm-gtags-select) ;;ジャンプ前の場所に戻る (local-set-key (kbd "C-c C-p") 'helm-gtags-pop-stack)))