# apt-get install rtags
コマンド名 | |
---|---|
オリジナル | debian パッケージ版 |
rc | rtags-rc |
rdm | rtags-rdm |
rp | rp |
# apt-get install clang libclang-dev cmake
$ git clone --recursive https://github.com/Andersbakken/rtags
$ cd rtags $ git submodule init $ git submodule update $ mkdir build $ cd build $ cmake .. $ make $ sudo make install
$ ls rtags/build/bin rtags-rc rtags-dm rp
$ rtags-dm --daemon
$ rtags-rc gcc $(CFLAGS) $(SRCS)
# apt-get install bear
$ bear -- make
$ cmake .. $ bear -- make
$ rtags-rc -J <compile_commands.jsonが置かれているディレクトリのパス>
$ rtags-rc -q
$ rtags-rc --delete-project [keyword-project-to-be-deleted]
$ rtags-rc --clear
$ rtags-rc -p <current projectにしたいproject>
$ pgrep -l rtags 19044 rtags-rdm $ kill -KILL 19044
build/src/rtags.el
(rtags-enable-standard-keybindings); enable rtags standard keymap
(rtags-submenu-list) ; enable rtags submenu list keymap
;;; rtags.el の設定 (when (require 'rtags nil 'noerror) (when (executable-find "rtags-rc") (setq rtags-rc-binary-name "rtags-rc")) ; debian では rc -> rtags-rc に変更されている (when (executable-find "rtags-rdm") (setq rtags-rdm-binary-name "rtags-rdm")) ; debian では rdm -> rtags-rdm に変更さている (defun rtags-local-conf () (rtags-mode) (rtags-start-process-unless-running) (setq rtags-autostart-diagnostics t) (rtags-diagnostics) (setq rtags-completions-enabled t) (rtags-enable-standard-keybindings) ; enable rtags standard keymap (rtags-submenu-list) ; enable rtags submenu list ;;; キーバインド:ネットでよく見掛ける設定だが、行末コメントの通り他のバインドを上書きしていてあまり良くないので使わない。 ; (local-set-key (kbd "M-.") 'rtags-find-symbol-at-point) ; batting with 'xref-find-definitions' ; (local-set-key (kbd "M-;") 'rtags-find-symbol) ; batting with 'comment-dwim' ; (local-set-key (kbd "M-@") 'rtags-find-references) ; batting with 'mark-word' ; (local-set-key (kbd "M-,") 'rtags-location-stack-back) ; batting with 'xref-pop-marker-stack' ; (local-set-key (kbd "M-<") 'rtags-location-stack-back) ; batting with 'beginning-of-buffer' ; (local-set-key (kbd "M->") 'rtags-location-stack-forward) ; batting with 'end-of-buffer' ;;; キーバインド:実際にはこちらを使う ;;; xcscope.el に操作感を似せつつ、併用出来るようキーバインドが被らないようにしている (local-set-key (kbd "C-c d d") 'rtags-find-symbol-at-point) (local-set-key (kbd "C-c d s") 'rtags-find-symbol) (local-set-key (kbd "C-c d r") 'rtags-find-all-references-at-point) (local-set-key (kbd "C-c d c") 'rtags-find-all-functions-called-this-function) (local-set-key (kbd "C-c d f") 'rtags-find-file) (local-set-key (kbd "C-c d i") 'rtags-symbol-info) (local-set-key (kbd "C-c d m") 'rtags-imenu) (local-set-key (kbd "C-c d t") 'rtags-taglist) (local-set-key (kbd "C-c d C") 'rtags-print-class-hierarchy) (local-set-key (kbd "C-c d <") 'rtags-location-stack-back) (local-set-key (kbd "C-c d >") 'rtags-location-stack-forward) (define-key rtags-mode-map "p" 'rtags-previous-match) (define-key rtags-mode-map "n" 'rtags-next-match) ) (add-hook 'c-mode-common-hook 'rtags-local-conf) (add-hook 'c++-mode-common-hook 'rtags-local-conf) (add-hook 'objc-mode-hook 'rtags-local-conf) )
binding | function | description | remark |
---|---|---|---|
C-c r , | rtags-find-references-at-point | 現在のカーソル位置のシンボルの定義を検索 | |
C-c r . | rtags-find-symbol-at-point | 現在のカーソル位置のシンボルを検索 | |
C-c r / | rtags-find-all-references-at-point | 現在のカーソル位置のシンボルの参照元を検索 | |
C-c r ; | rtags-find-file | 現在のカーソル位置のファイル名を検索 | 複数ある場合は検索対象をTAB補完で選択 |
C-c r < | rtags-find-references | ||
C-c r > | rtags-find-symbol | 対話式に指定したシンボルを検索 | |
C-c r A | rtags-find-functions-called-by-this-function | 指定した関数から呼び出している関数を検索 | 結果一覧(*RTags*バッファ)上で [Enter] 押しで、呼び出された側の関数の関数定義に Jump する |
C-c r B | rtags-show-rtags-buffer | ||
C-c r C | rtags-compile-file | ||
C-c r D | rtags-diagnostics | ||
C-c r E | rtags-preprocess-file | ||
C-c r F | rtags-fixit | ||
C-c r G | rtags-guess-function-at-point | ||
C-c r I | rtags-imenu | ||
C-c r K | rtags-make-member | ||
C-c r L | rtags-copy-and-print-current-location | 現在カーソルがある位置のファイルのパス、行番号、カラム数をミニバッファに表示 | |
C-c r M | rtags-symbol-info | カーソル位置のシンボルのサイズ(sizeof())、アライメントなどの情報を表示 | |
C-c r O | rtags-goto-offset | ||
C-c r P | rtags-dependency-tree-all | ||
C-c r R | rtags-rename-symbol | ||
C-c r S | rtags-display-summary | ||
C-c r T | rtags-taglist | タグの一覧を表示 | |
C-c r U | rtags-display-summary-as-message | ||
C-c r V | rtags-print-enum-value-at-point | enum 値の定義位置にカーソルを置いた状態で実行すると、その enum 定義値の値を表示する | enum 値の参照先では機能しない |
C-c r X | rtags-fix-fixit-at-point | ||
C-c r Y | rtags-cycle-through-diagnostics | ||
C-c r Z | rtags-location-stack-visualize | ||
C-c r [ | rtags-location-stack-back | 一つ前の検索履歴に戻る | |
C-c r ] | rtags-location-stack-forward | 一つ先の検索履歴に進む | rtags-location-stack-back で一つ以上検索履歴を戻った状態であることが前提 |
C-c r _ | rtags-asm-file | ||
C-c r a | rtags-expand-auto | ||
C-c r e | rtags-reparse-file | ||
C-c r h | rtags-print-class-hierarchy | クラス階層を表示 | |
C-c r l | rtags-list-results | ||
C-c r p | rtags-dependency-tree | ソース・ヘッダの依存関係を表示 | |
C-c r t | rtags-references-tree | 参照ツリー(指定したシンボルが関数であれば、その callstack に相当する情報)を表示 | 実行した際、画面上何も起こってないように見えるときは、*RTags* バッファを手動で表示する。 *RTags* バッファで [Tab] キーを押すと、カーソル位置の行の呼び出し階層表示が1階層ずつ展開される。 |
C-c r v | rtags-find-virtuals-at-point |
カーソルが指しているもの | ジャンプ先 | 備考 |
---|---|---|
実体やポインタ変数 | 定義位置 | |
型名 | 型の定義位置 |
Superclasses: class TestDataB c++/polymorphism/test_data_b.h:6:7: class TestDataB : public TestDataIF class TestDataIF c++/polymorphism/test_data_if.h:4:7: class TestDataIF
$ make rtagsとすれば、tag 生成までの一通りの処理が実行される(但し、 clean ターゲットは別途用意されている前提となる):
# for rtags: RTAGS_CMD_RC := /usr/bin/rtags-rc RTAGS_CMD_RDM := /usr/bin/rtags-rdm BEAR_CMD := /usr/bin/bear COMPILE_DB_FILE := compile_commands.json IS_RTAGS_RDM_STARTED := $(shell ls -1 /run/user/$(shell id -u)/rdm.socket 2>/dev/null| wc -l) rtags : rtags-kill-daemon rtags-delete-compile-db clean rtags-start-daemon rtags-create-compile-db rtags-load-compile-db rtags-kill-daemon : ifeq ($(IS_RTAGS_RDM_STARTED),1) pgrep rtags-rdm | xargs kill -KILL; endif rtags-delete-compile-db : $(RMF) $(COMPILE_DB_FILE) rtags-start-daemon : $(RTAGS_CMD_RDM) --daemon; rtags-create-compile-db : $(BEAR_CMD) -- make; rtags-load-compile-db : $(RTAGS_CMD_RC) -J .;
$ rtags-rdm --daemon rtags-rdm: ./src/Location.h:275: static void Location::set(const Path&, uint32_t): Assertion `!refId || refId == fileId' failed. Caught signal 6 /usr/bin/rtags-rdm(+0x72762)[0x5587b57d3762] /lib/x86_64-linux-gnu/libc.so.6(+0x38d60)[0x7fea6277cd60] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x141)[0x7fea6277cce1] /lib/x86_64-linux-gnu/libc.so.6(abort+0x123)[0x7fea62766537] /lib/x86_64-linux-gnu/libc.so.6(+0x2240f)[0x7fea6276640f] /lib/x86_64-linux-gnu/libc.so.6(+0x31662)[0x7fea62775662] /usr/bin/rtags-rdm(_ZN8Location3setERK4Pathj+0x1cb)[0x5587b5850beb] /usr/bin/rtags-rdm(_ZN7Project11readSourcesERK4PathR14IndexParseDataP6String+0x3b2)[0x5587b58f1b62] /usr/bin/rtags-rdm(_ZN7Project4initEv+0x23a)[0x5587b58f200a] /usr/bin/rtags-rdm(_ZN6Server10addProjectERK4Path+0x102)[0x5587b5803e92] /usr/bin/rtags-rdm(_ZN6Server4loadEv+0x107a)[0x5587b580651a] /usr/bin/rtags-rdm(_ZN6Server4initERKNS_7OptionsE+0x10d7)[0x5587b5809037] /usr/bin/rtags-rdm(main+0x2734)[0x5587b57d1424] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xea)[0x7fea62767d0a] /usr/bin/rtags-rdm(_start+0x2a)[0x5587b57d364a]
$ rtags-rdm -C $ rtags-rdm --daemon
version | distribution | remark | ||
---|---|---|---|---|
rtags | rtags.el | emacs | ||
2.38-3 | 2.41.133 | 29.1 | Debian 11 (bullseye) | emacs は自前ビルドしたもの |
2.38-3 | 2.41.133 | 28.2 | Debian 11 (bullseye) | emacs は自前ビルドしたもの |
2.38-3 | 2.38.130 | 27.1 | Debian 11 (bullseye) | いずれも Debian11 公式リリース版 |
2.37-1 | 2.37.130 | 26.3 | Ubuntu 20.04 (focal) | emacs は Ubuntu20.04 公式リリース版 |
CPU | i7-1165G7 |
---|---|
Memory | 32GB |
Storage | MZVLB1T0HBLR-000L7 (Samsung) |