我用的是https://github.com/chxuan/vimplus这个项目的vim配置。感谢作者。
1. 安装cscope
可以编译源码安装,也可以直接用包管理器安装。centos下安装:
yum install cscope
2. 安装cscope.vim
Plug 'vim-scripts/cscope.vim'
3. vimrc配置cscope快捷键
~/.vimrc 中添加如下配置:
" scscope
set cscopequickfix=s-,c-,d-,i-,t-,e-
nnoremap <leader>sa :call cscope#findInteractive(expand('<cword>'))<CR>
nnoremap <leader>sl :call ToggleLocationList()<CR>
" s: Find this C symbol
nnoremap <leader>ss :call cscope#find('s', expand('<cword>'))<CR>
" g: Find this definition
nnoremap <leader>sg :call cscope#find('g', expand('<cword>'))<CR>
" d: Find functions called by this function
nnoremap <leader>sd :call cscope#find('d', expand('<cword>'))<CR>
" c: Find functions calling this function
nnoremap <leader>sc :call cscope#find('c', expand('<cword>'))<CR>
" t: Find this text string
nnoremap <leader>st :call cscope#find('t', expand('<cword>'))<CR>
" e: Find this egrep pattern
nnoremap <leader>se :call cscope#find('e', expand('<cword>'))<CR>
" f: Find this file
nnoremap <leader>sf :call cscope#find('f', expand('<cword>'))<CR>
" i: Find files #including this file
nnoremap <leader>si :call cscope#find('i', expand('<cword>'))<CR>
if has("cscope")
set csprg=/usr/bin/cscope
set csto=1
set cst
set nocsverb
if filereadable("cscope.out")
cs add cscope.out
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
endif
4. 实例
4.1 生成cscope.files 文件路径使用绝对路径
find `pwd` -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.cc" -o -name "*.c" > cscope.files
4.2 生成cscope.out
cscope -Rbq -i cscope.files
或者
cscope -Rbq // cscope 默认在当前路径查找cscope.files
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。
其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
上面所用到的命令参数,含义如下:
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
4.3 添加cscope.out 到vim
在源码目录打开vim
:cs add cscope.out
如果vimrc文件已经添加 3 中提到的配置,则会自动执行cs add cscope.out
4.3 查看cscope 帮助
:cs find s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
:cs find g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
:cs find d: 查找本函数调用的函数
:cs find c: 查找调用本函数的函数
:cs find t: 查找指定的字符串
:cs find e: 查找egrep模式,相当于egrep功能,但查找速度快多了
:cs find f: 查找并打开文件,类似vim的find功能
:cs find i: 查找包含本文件的文