#author("2023-12-07T00:54:04+09:00","","") #author("2023-12-07T00:54:19+09:00","","") #topicpath /////////////////////////////////////////////////////////////////////////////// * 目次 [#m3be6eaf] #contents(); //////////////////////////////////////////////////////////////////////////////// * gtags / global [#uc7a788c] - タグシステムの一つ - debian では、 global パッケージに入っている。 - 敢えて絞った結果なのかもしれないが、 emacs 用の gtags.el で用意されている機能は、 [[cscope>Prog/TagSystem/cscope]], [[rtags>Prog/TagSystem/rtags]] のそれと比べて随分少ない。 //============================================================================== ** tag の生成 [#he22dbd6] $ gtags [options] [path] $ gtags -f <files> $ gtags -v - gtags には、etags と違って append mode が存在しないため、xargs でマルチスレッド化して実行するのは不可かもしれない。 - -f <file> を指定しない場合、gtags はカレント以下のディレクトリを走査してタグ情報を生成する。 - tag の生成処理が終わると、実行したディレクトリ配下に、下記4つのファイルが作られる: GPATH GTAGS GRTAGS |~file |~description | |GTAGS |シンボル定義のデータベース | |GRTAGS |シンボル参照のデータベース | |GPATH |ソースファイルへのパスのデータベース | //============================================================================== ** emacs の設定 [#t7049b32] - gtags.el を入手する -- ディストリビューションによっては、下記のようなパスにインストールされる場合もある /usr/share/emacs/site-lisp/global/gtags.el -- もしディストリビューションで用意されていない場合は、手動で取得し、library-path の通っている場所に配置する。 -- 大文字・小文字を区別するように設定する~ → [[検索時に大文字・小文字を区別するかしないかの設定>Editor/emacs#case-fold-search]] - 設定 (when (locate-library "gtags") ; gtags.el で定義されているキーバインドを有効にする。 ; gtags.el を読み込む直前に設定する必要がある。 ; 但し、これを設定すると "C-c r" が gtags で喰われてしまう為、rtags との併用が出来なくなるので注意。 (setq gtags-suggested-key-mapping t) (require 'gtags) (autoload 'gtags-mode "gtags" "" t) (setq gtags-mode-hook '(lambda () ; ネット上でよく見かけるキーバインド(個人的には非推奨) (local-set-key "\C-v" 'gtags-visit-rootdir) (local-set-key "\M-t" 'gtags-find-tag) ;関数の定義元へ (local-set-key "\M-r" 'gtags-find-rtag) ;関数の参照先へ (local-set-key "\M-s" 'gtags-find-symbol) ;変数の定義元/参照先へ (local-set-key "\M-]" 'gtags-find-tag-from-here);現在のカーソルがある語をtagとして検索 (local-set-key "\M-T" 'gtags-find-pattern);テキストを検索 (local-set-key "\M-f" 'gtags-find-file) ;ファイルを検索 (local-set-key "\C-t" 'gtags-pop-stack) ;一つ前の検索結果に戻る )) ) //------------------------------------------------------------------------------ ** gtags.el の標準キーバインド [#hf536c9d] |~binding |~function |~description |~remark | |C-t |gtags-pop-stack | | | |C-] |gtags-find-tag-from-here | | | |<mouse-2> |gtags-find-tag-by-event | | | |<mouse-3> |gtags-pop-stack | | | |M-* |gtags-pop-stack | | | |M-. |gtags-find-tag | | | |C-c I |gtags-find-with-idutils | | | |C-c P |gtags-find-file | | | |C-c d |gtags-find-tag | | | |C-c f |gtags-parse-file | | | |C-c g |gtags-find-with-grep | | | |C-c h |gtags-display-browser | | | |C-c r |gtags-find-rtag | | | |C-c s |gtags-find-symbol | | | |C-c t |gtags-find-tag | | | |C-c v |gtags-visit-rootdir | | | |C-x 4 . |gtags-find-tag-other-window | | | //------------------------------------------------------------------------------ ** [[rtags.el>Prog/TagSystem/rtags#rtags-emacs]] との併用 [#q44c00fb] - gtags.el で定義されているキーバインドを有効にすると、rtags.el で定義されたキーバインドのプレフィックスである "C-c r" が gtags.el に喰われてしまって使えない。これでは rtags.el の機能を使いこなせないため、 gtags.el で定義されている "C-c r" を無効にする: index da38467..7efea77 100644 --- a/site-lisp/gtags.d/gtags.el +++ b/site-lisp/gtags.d/gtags.el @@ -215,7 +215,7 @@ (define-key gtags-mode-map (concat gtags-prefix-key "g") 'gtags-find-with-grep) (define-key gtags-mode-map (concat gtags-prefix-key "I") 'gtags-find-with-idutils) (define-key gtags-mode-map (concat gtags-prefix-key "s") 'gtags-find-symbol) - (define-key gtags-mode-map (concat gtags-prefix-key "r") 'gtags-find-rtag) + ; (define-key gtags-mode-map (concat gtags-prefix-key "r") 'gtags-find-rtag) (define-key gtags-mode-map (concat gtags-prefix-key "t") 'gtags-find-tag) (define-key gtags-mode-map (concat gtags-prefix-key "d") 'gtags-find-tag) (define-key gtags-mode-map (concat gtags-prefix-key "v") 'gtags-visit-rootdir) //============================================================================== ** vi での設定 [#acde7a15] + vimのプラグインを ~/.vim/plugin にコピー $ mkdir ${HOME}/.vim/plugin $ cp /usr/share/doc/global/examples/gtags.vim.gz ${HOME}/.vim/plugin $ cd ${HOME}/.vim/plugin $ gunzip gtags.vim.gz + ~/.vimrc にgtagsの設定を追加 map <C-h> :Gtags -f %<CR> map <C-j> :GtagsCursor<CR> map <C-n> :cn<CR> map <C-p> :cp<CR> //------------------------------------------------------------------------------ *** 操作 [#s7eecedc] |~binding |~ description | |C-h |そのソースの関数を表示 | |C-n |リストのカーソルを下に移動 | |C-p |リストのカーソルを上に移動 | |C-j |現在の関数の中にジャンプ | |C-o |ジャンプする前の位置に戻る | //============================================================================== ** 参考リンク [#kf18ab46] - [[GNU GLOBAL(gtags)>http://cha.la.coocan.jp/doc/gnu_global.html]] - [[新機能の御紹介>http://www.tamacom.com/handbook/new.html]] - [[[Linux][開発] GNU GLOBALとvimで快適な開発環境を手に入れる>https://qiita.com/suzutsuki0220/items/1e755fd98e5b12af3e2d]]