using ctags and cscope in vim

来源:互联网 发布:好牧人12网络牧养中心 编辑:程序博客网 时间:2024/05/19 17:59

ctags

1.安装ctags

sudo apt-get install ctags
也可以源码安装或直接下载可执行的bin文件。

2.生成tags数据文件

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q

也可以先生成一个文件列表,再根据文件列表生成tags数据文件。这样可以排除不想要的一些源码文件。
ctags --c++-kinds=+p --fields=+iaS --extra=+q

对于linux kernerl源码,有个更简单的方法。
make tags ARCH=arm64

3.加载tags文件

如果tags文件在当前目录下,当打开vim的时候可自动加载。

如果不在当前目录下,可在vim中用如下方法加载tags文件。
:set tags=~/xxx/tags

使用tags

ctrl-] 跳转到光标所在标识符定义处。
ctrl-w ] 分割窗口并跳转到光标所在标识符定义处。
ctrl-t 跳回去。

:tag xxx 跳转到xxx定义处。
:stag xxx 分割窗口并跳转到xxx定义处。
:tags 显示跳转历史。
:tag 跳转到跳转历史的最后一条。
:[n]tnext 下一个。
:[n]tprev 上一个。
:tfirst 第一个tag。
:tlast 最后一个tag。
:tag xxx_<Tab> 自动补全。
:tag /xxxx 搜索而不是完全匹配。

其它用法:
:help tag

cscope

vim默认支持cscope
http://cscope.sourceforge.net

1.安装cscope

sudo apt-get install cscope

2.生成cscope数据库文件

cscope -Rbq -f xxx.out

也可根据文件列表生成cscope数据库文件。这样可以排除源码目录中某些不想要的源码文件。
cscope -bqk -i cs.files

对于linux kernel,应该指定“k”选项:
cscope -Rbqk -f xxx.out
另外,对于linux kernel,有更简单的方法:
make cscope ARCH=arm64

在vim中使用cscope

加载cscope数据库文件:
:cs add ~/xxx/cscope.out

如果cscope数据库文件在当前目录,是可以自动加载的。

:cs help
:cs find c/d/e/f/g/i/s/t

:help cs

cscope的快捷键

有一个插件,将cs命令映射成快捷键。
http://cscope.sourceforge.net/cscope_maps.vim
下载这个插件,放到~/.vim/plugin/目录下,可以使用快捷键。
ctrl-\ c
ctrl-\ d
......

附A:生成文件列表的一种方法

find . \-path "./arch/*" ! -path "./arch/arm64/*" -prune -o \-path "./Documentation*" -prune -o \-path "./scripts*" -prune -o \-name "*.[chxsS]" -print > cs.files

附B:vim之于程序的其他常用方法

[I 查找全局标识符定义。这个命令不依赖ctags,而是在当前文件和include的文件中搜索。
[<Tab> 查找全局标识符定义并直接跳转到第一个匹配的。
3[<Tab> 跳转到第3个匹配的。
[i 只列出第一个匹配的。
]I 只列出当前光标之后的匹配项。
]i 只列出当前光标之后的第一个匹配项。

[D 只查找以”#define”定义的宏。
[d 只列出第一个匹配。
]D 只列出当前光标之后的匹配。
]d 只列出当前光标之后的第一个匹配。

gD[I类似,但只搜索当前文件,不搜索include的文件。
gd 只在当前函数中查找。

[# 跳转到#if或#ifdef。
]# 跳转到#else或#endif。

[[ 跳转到代码块开头。
][ 跳转到代码块结尾。

[{ 跳转到代码块开头,但越过平级的代码块。
]} 跳转到代码快几位,但越过平级的代码块。

[] 上一个函数的结尾。
]] 下一个函数的开始。

[m 上一个成员函数的开头。
]m 下一个成员函数的开头。

[/ 注释的开头。
]/ 注释的结尾。

原创粉丝点击