# 安装
sudo apt install universal-ctags
# 查看版本
ctags --version
# 当前目录生成tags
ctags -R .
# 指定具体文件生成tags
ctags filename.c filename1.c file.h
# 指定类型生成tags
find -name *.h | xargs ctags -a
# .vimrc设置
set tags=tags;
set autochdir
# 跳转符号
vi -t WinMain
# 快捷键:
Ctrl + T "返回原来的文件
Ctrl + O "返回之前的位置
Ctrl + ] "跳至下一个标签
Ctrl + W + ] "分割窗口跳转
# 其它常用命令
:tag {ident} "跳转到ident标签位置上
:tags "显示标签栈
g] 列出变量的所有引用供用户选择
:ts "显示找到的所有标签
:tp "显示上一个标签
:tn "显示下一个标签
cscope
# 安装
sudo apt install cscope
# 生成索引
cscope -Rbq
# cscope参数
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-d: 只调出cscope gui界面,不跟新cscope.out
-k: 在生成索引文件时,不搜索/usr/include目录
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用"-",表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
# :cs find s/g/d/c/t/e/f ...
0或s:查找这个(指name参数,下同)C符号。
1或g:查找这个定义。
2或d:查找被这个函数调用的函数。
3或c:查找调用该函数的函数。
4或t:查找这个文本字符串。
6或e: 查找这个egrep的pattern。
7或f:查找这个文件。
8或i:查找#include了这个文件的所有文件。
# 安装
sudo apt install global
# 生成索引文件
find . -type f -print > gtags.files
gtags –v
# 查找定义
global AActor
# 查看详细
global -x AActor
# 查找引用
global -r AActor
# POSIX 正则表达式
global 'A[1-3]'
# 查找指定匹配行
global -xg '#ifdef'
# 符号补全搜索
global -c A
# 安装gtags.el,.emacs 或是 .emacs.d/init.el 中加入
(add-to-list 'load-path "/usr/share/emacs/site-lisp/global/gtags.el")
(setq gtags-suggested-key-mapping t)
# 快捷键
C-c v,告诉Emacs项目的根目录,即到哪里去找GTAGS等文件。这一步不要跳过,否则你查找符号时Emacs会问你去哪里查找tags。
M-.,跳转到符号定义。
C-t,返回。
C-c g,在代码中用grep查找符号。
C-c s, 搜索某个符号。
C-c r, 看一个函数在哪些地方被引用。