1. 查看vim是否支持cscope
$ vim --version | grep cscope
2. 编译支持cscope的 VIM(--enable-cscope)
# USE="bash-completion cscope nls perl python -acl -gpm -minimal -ruby -vim-pager -vim-with-x" emerge vim
# emerge -av dev-util/cscope
# emerge -av dev-util/ctags
$ which cscope
$ which ctags
3. 查看帮助
$ man cscope
$ man ctags
:help cscope (vim command)
参考[1] http://vimcdoc.sourceforge.net/doc/if_cscop.html
4. 使用cscope[2]
当 前目录有main.c,其中调用了cstest.c中的print(),此函数在cstest.h中进行了声明。
使用下面的命令生成代码 的符号索引文件:
$ cscope -Rbkq
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。上面命令的参数含义如下:
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-k: 在生成索引文件时,不搜索/usr/include目录
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用"-",表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
在 缺省情况下,cscope在生成数据库后就会进入它自己的查询界面,一般不用这个界面,所以使用了"-b"选 项。如果已经进入了这个界面,按CTRL-D退出。
接下来可以在vim里浏览代码了
$ vim main.c
在 vim里命令状态下添加符号索引库
: cscope add cscope.out
然后可以查看相应的函数定义或文 件,ctrl+t返回。
: cscope find g print
: cscope find f cstest.h
# 注意# 所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。
5. 创建相应的快捷键
将以下内容添加到~/.vimrc中,vim会自动加载当前目 录下的符号索引cscope.out,可以使用ctrl+t、ctrl+]等。
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope setting
if has("cscope")
set csprg=/usr/bin/cscope "指定用来执行 cscope 的命令
set csto=1 "先搜索tags标签文件,再搜索cscope数据库
set cst "使用|:cstag|(:cs find g),而不是缺省的:tag
set nocsverb "不显示添加数据库是否成功
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out "添加cscope数据库
endif
set csverb "显示添加成功与否
endif
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
其 中<C-@>g是先同时按ctrl+@键,之后再按一个g。功能就是查看当前光标所在符号的定义。
6. vim阅读代码
添加cscope符号索引数据库后,可以调用"cscope find"命令进行查找,vim支持8种 cscope的查询功能。如在代码中查找调用work()函数的函数,可以在vim命令状态下输入":cs find c work",回车即可。还可以进行字符串查找,它会对双引号或单引号括起来的内容查找。还可以输入一个正则表达式,这类似 于egrep程序的功能。
:cs help (vim command下查询)
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查 找指定的字符串
e: 查找egrep模式,相当于egrep 功能,但查找速度快多了
f: 查找并打开文件,类似vim的 find功能
i: 查找包含本文件的文件
7. 查看阅读c++代码[3]
cscope 缺省只解析C文件(.c和.h)、lex文件(.l)和yacc文件(.y),虽然它也可以支持C++以及Java,但它在扫描目录时会跳过C++及 Java后缀的文件。如果希望cscope解析C++或Java文件,需要把这些文件的名字和路径保存在一个名为cscope.files的文件。当 cscope发现在当前目录中存在cscope.files时,就会为cscope.files中列出的所有文件生成索引数据库。
下面的 命令会查找当前目录及子目录中所有后缀名为".h", ".c", "cc"和".cpp"的文件,并把查找结果重定向到文件cscope.files中。然后cscope根据 cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,在vim中执行":help tags"命令查询它的用法。它可以和cscope一起使用。
$ find . -name "*.h" -o -name "*.c" -o -name "*.cc" -o "*.cpp" > cscope.files
$ cscope -bkq -i cscope.files
$ ctags -R
8. 在 vim中使用tags查找符号
查看ctags帮助
$ man ctags
:help ctags (vim command)
:help tags (vim command)
在源 代码根目录下执行 ctags -R 命令用来为程序源代码生成标签文件,其-R选项表示递归操作,同时为子目录也生成标签文件。vim利用生成的标签文件,可以进行相应检索、并在不同的文件 C语言元素之间来回切换。
$ ctags -R
A) vim 中使用":tag xxx"跳到函数或数据结构xxx处。使用tag命令时,可以使用TAB 键进行匹配查找,继续按TAB键向下切换。
某个函数有多个定义时
:tag
跳到第一个定义处,优先跳转 到当前文件
:tnext
跳到第一个
:tfirst
跳到前count个
:[count]tprevious
跳 到后count个
:[count]tnext
跳到最后一个
:tlast
你也可以在所有 tagname中选择:
:tselect tagname
如果想跳到包含block的标识符":tag /block" 然后用TAB键来选择。这里'/'就 是告诉vim 'block'是一个语句块标签。
B) 用"ctrl+]"快捷键,跳转到光标所在函数标识符的定义处。
C) 使 用"ctrl+t"退回上层。 如果想在以write_开头的标识符中选择一下, :tselect /^write_ 这里,'^'表示开头,同理,'$'表示末尾。
D) 运 行vim的时候,必须在"tags"文件所在的目录下运行。否则,运行vim的时候还要用":set tags=xxx"命令设定"tags"文 件的路径,这样vim才能找到"tags"文件(这儿我们已经设置过了"set tags=tags;",在子目录中也可以使用)。
E) 在 函数中移动光标的快捷键:
[{ 转到上一个位于第一列的"{"
}] 转到下一个位于第一列的"{"
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
分享到:
相关推荐
在Vim中集成cscope,可以极大地提高代码阅读和调试的效率。配置cscope后,开发者可以通过简单的命令在庞大的代码库中穿梭,快速定位代码的相关部分。 其次,`ctag`是一种用于创建和使用标签的工具。在Vim中,ctags...
Vim、ctags和cscope是Linux开发人员常用的代码阅读工具,它们能够帮助开发者更高效地理解和导航源代码。以下是对这些工具的详细介绍: 1. **Vim**:Vim是一款高度可配置的文本编辑器,它具有强大的文本操作能力和...
代码阅读,vim插件使用,根据自己指定的目录生成ctags cscope等索引文件,shell脚本,仅供参考。
在windows下用vim的兄弟不少吧。 代码的话需要用cscope和ctags的组合, 可以达到类似sourceinsight的效果。这次上传的是cscope.exe和ctags.exe。这个是编译好的版本,在windows下直接用。不需要cygwin.dll的参与 我...
"vim + ctags + cscope + nerdtree + taglist + vundle"的组合,是Vim高效开发环境的经典搭建方案,尤其适合进行大型代码库的管理和调试。 首先,`Vim` 是一个高度可配置的文本编辑器,它支持命令行模式,提供丰富...
而`ctags`和`cscope`则是Vim中的两个强大工具,能够帮助程序员快速跳转代码、查找函数定义等,极大地提升了代码导航的能力。现在我们将详细探讨这三个工具以及如何进行一键配置。 **Vim配置** Vim的配置主要通过...
需要提前安装好 vim gvim/mvim cscope ctag 然后解压在当前目录 执行 install 就行了。。 windows下安装只需要吧 windows目录下的文件覆盖过去就好 macosx上是 mvim 哦。。 sourceinsight的代码查看功能启用,按...
需要提前安装好 vim gvim cscope ctag 然后解压在当前目录 执行 install 就行了。。 sourceinsight的代码查看功能启用,按下工具栏某个生成符号数据库的图标,就行了,各类跳转和搜索都有图标,快速使用。注意:...
下面将详细解释其中提及的几个关键工具——cscope、ctag以及gfind。 1. **cscope**:Cscope是一款强大的源代码浏览和搜索工具,主要用于C/C++等编程语言。它提供了多种功能,如查找函数定义、全局变量、字符串常量...
"一键安装 ctags和cscope的方法"这个主题是关于如何利用Vim的插件系统,高效地配置Vim环境,使其功能接近于Source Insight这样的专业代码浏览和分析工具。以下将详细介绍ctags和cscope这两个工具,以及如何通过特定...
vim 支持 8 种 cscope 的查询功能,例如,可以输入 `:csfind c work` 查找调用 work() 函数的函数。 cscope 使用示例 例如,我们想在代码中查找调用 work() 函数的函数,可以输入 `:csfind c work`,回车后发现...
1.使用前请先安装ctag和cscope 2.解压替换原有的.vimrc和.vim目录 3.功能键 F2:打开/关闭Tlist F3:打开/关闭目录树 F4:打开"最近打开的文件" F5: 打开文件搜索 F6:在当前目录及子目录中搜索光标停留的word F7:...
vim 配置和插件打包资源,方便部分离线状态的环境配置。使用tar -jvx -f vim.tar.bz2解压。 包含cscope、ctag和跳转,语法,高亮,智能补全能常用插件。
" use both cscope and ctag for 'ctrl-]', ':ta', and 'vim -t' set cscopetag " check cscope for definition of a symbol before checking ctags: set to 1 " if you want the reverse search order. set ...
本“vim家庭集合”涵盖了vim的配置、个性化设置,以及对ctag和cscope的支持,旨在打造一个高效且舒适的编程工作空间。 首先,`.vimrc`文件是Vim的配置文件,它是自定义Vim行为的核心。通过编辑`.vimrc`,你可以调整...
完整的windows vim IDE搭建环境搭建,文档简单详细明了,安装文件很齐全,只要按照文档,不用5钟,windows vim IDE搭建就可以搭建完成,并且好用,所有的插件全了ctag、cscope、taglist、函数列表等,还有使用说明。...
一个还算不错的vimrc文件, vim写C和c++代码必备,含ctag cscope, 窗口等快捷方式