LoginSignup
0
1

More than 3 years have passed since last update.

*tagsの話

Posted at

C++のソースを書いていると、この変数の宣言どこだっけ?とか、この関数の宣言どこだっけ?とか、呼んでるところどこだっけ?みたいなことが良くあります。
VisualStudioなら、なんかファンクションキーを押したら飛んでいける奴です。

etags, ctags

昔からある奴です。
面倒なので説明は省略します。

gtags

GNU globalのものだそうです。
Ubuntuだとその名もglobalと言うパッケージをインストールすると、gtagsとかglobalコマンドが使えるようになります。

init.el に以下を追加します。

init.el
;; gtags
(use-package gtags
  :commands gtags-mode
  :config
  (add-hook 'c-mode-common-hook 'gtags-mode)
  )

プロジェクトのトップディレクトリで、gtags と打つと、GPATH, GRTAGS, GTAGS と言う3つのファイルができます。
デフォルトではキーが何も設定されていないので、M-x gtags-find-tag とか打つ必要があります。
gtagsを使う場合は、使いそうなコマンドをキー割り当てしましょう。

ここまでは github の gtags ブランチで。

rtags

ctags, etags, gtags は、タグの情報をファイルに書き、emacsはそのファイルを読んで動作する。
rtags は、rdm と言うデーモンが情報をemacsとやり取りする。

Ubuntuの場合、パッケージに見当たらなかったので、githubに書いてある通りにgit cloneしてビルドした。
使い方はwikiにある。
手順通りにビルドすると rtags.el は /usr/local/share/emacs/site-lisp/rtags に入るのだが、最近はpackage-installばかり使って個人の ~/.emacs.d にパッケージが入ったため、/usr/local/share/emacs/site-lisp/subdirs.el が存在しなかった。
このため、rtags.elが読み込めなくて少し悩んでしまった。

以下の内容をinit.elに追加する。

init.el
;; rtags
(use-package rtags
  :hook (c++-mode . rtags-start-process-unless-running)
  :config
  (rtags-enable-standard-keybindings)
  (setq rtags-completions-enabled t)
  (add-to-list 'company-backends 'company-rtags)
  (bind-keys :map c-mode-base-map
             ("M-." . rtags-find-symbol-at-point)
             ("M-," . rtags-location-stack-back)
             ("C--" . rtags-find-references-at-point)
             ("M-;" . rtags-find-file)
             ("C-." . rtags-find-symbol)
             ("C-," . rtags-find-references)
             ("C-<" . rtags-find-virtuals-at-point)
             ("M-i" . rtags-imenu))
  )

rtags-enable-standard-keybindingsでデフォルトのキー設定がされるのだが、prefixが深くて使いにくいので、良く使うコマンドはキー割り当てしよう。
この状態でc++のソースを開いて、M-.とか押すと、indexされてませんよ?とか怒られるので、プロジェクトのトップディレクトリで rc -J build/とかやってcompile_commands.json の位置を教えてあげると、情報がインデックスされて使えるようになる。
Makefileにも対応しているので、マニュアルを読んで欲しい。

とは言え、lspにも似たようなことができるはずだし、rtagsにもcompileコマンドっぽいものがあったりして、機能がかぶっているような気もしないでもない。

ここまでは github の rtags ブランチで。

0
1
0

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
  3. You can use dark theme
What you can do with signing up
0
1