cscope的使用

来源:互联网 发布:js中json增加元素 编辑:程序博客网 时间:2024/05/16 12:18


首先自然是安装vim跟cscope了

如果项目比较简单, 那就直接cscope -R, 会在当前目录下生成一个数据库文件cscope.out

这个时候用vim编辑项目中的任意一个源文件, :cs show  可能会显示 “no cscope connection"

这是因为vim没有帮你自动加载数据库文件, 用:cs add cscope.out就可以了

这个时候命令:cs find s tagname就可以用了, 但用ctrl + ]的时候不会自动跳转, 这还是因为vim没有把你的cscope数据库文件当成tag文件, 需要用: set cst 或者:set cscopetag, 这样就会把cscope的数据库当成tag文件了

把下面代码放到.vimrc(/etc/vim/.vimrc)文件中, 以后系统就会自动帮你做了

 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" cscope setting""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""if has("cscope")"  set csprg=/usr/bin/cscope"  set csto=1"  set cst"  set nocsverb  " add any database in current directory"  if filereadable("cscope.out")"      cs add cscope.out"  endif"  set csverb"endif
if has("cscope")    set csprg=/usr/bin/cscope    set csto=1    set cst    set nocsverb    set cspc=3    "add any database in current dir    if filereadable("cscope.out")        cs add cscope.out    "else search cscope.out from parent path elsewhere    else       let cscope_file=findfile("cscope.out", ".;")       let cscope_pre=matchstr(cscope_file, ".*/")       if !empty(cscope_file) && filereadable(cscope_file)           exe "cs add" cscope_file cscope_pre       endif           endifendif
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>



如果有大型的项目, cscope -R不但会消耗大量的时间, 而且还会干扰tags,所以一般会现生成一个列表

 
 LNX=/home/jru/linux-2.4.18    cd /      find  $LNX                                                                \ -path "$LNX/arch/*" ! -path "$LNX/arch/i386*" -prune -o               \ -path "$LNX/include/asm-*" ! -path "$LNX/include/asm-i386*" -prune -o \ -path "$LNX/tmp*" -prune -o                                           \ -path "$LNX/Documentation*" -prune -o                                 \ -path "$LNX/scripts*" -prune -o                                       \ -path "$LNX/drivers*" -prune -o                                       \        -name "*.[chxsS]" -print >/home/jru/cscope/cscope.files


然后使用这个列表生成一个cscope.out的数据库文件,(上面加了绝对路径,使得数据库文件可以放在任意地方)


 cd  /home/jru/cscope
  cscope -bkq -i cscope.files

/////////////////////
  cscope -Rbkq
  ctags -R
//////////////////////


这样就会生成一个数据库文件了
cscope的一些参数的意义如下

 
  • -R: 在生成索引文件时,搜索子目录树中的代码
  • -b: 只生成索引文件,不进入cscope的界面
  • -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
  • -k: 在生成索引文件时,不搜索/usr/include目录
  • -i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用”-“,表示由标准输入获得文件列表。
  • -Idir: 在-I选项指出的目录中查找头文件
  • -u: 扫描所有文件,重新生成交叉索引文件
  • -C: 在搜索时忽略大小写
  • -Ppath: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。



cscope的一些命令如下

 
  • s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
  • g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能
  • d: 查找本函数调用的函数
  • c: 查找调用本函数的函数
  • t: 查找指定的字符串
  • e: 查找egrep模式,相当于egrep功能,但查找速度快多了
  • f: 查找并打开文件,类似vim的find功能
  • i: 查找包含本文件的文件


可以在.vimrc设置一个自动更新的快捷键

 nmap <F5> :!find . -iname '*.c' -o -iname '*.cpp' -o -iname '*.h' -o -iname '*.hpp' > cscope.files<CR> 
                        \ :!cscope -b -i cscope.files -f cscope.out<CR> 
                        \ :cs reset<CR>
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 荒野直播:影帝的小娇娇藏不住了 限时暗恋 被迫给反派续命后在娱乐圈爆火了 将军夫人你莫走 在源能世界中觉醒全知之眼 我去华娱探探路 带娃虐渣,女将军穿年代后杀疯了 带着妈妈活到末世结束 十八线女配穿进后宫演顶流 斗罗:重生胡列娜在武魂殿当团宠 大景女星官 报!娘娘在种田路上福星高照 靠美食成为星际首富 夫人她每天都想摸鱼摆烂 寒门重生女 穿书:侧妃她要改剧本 作妖小青梅总想遇见我 重生成团宠文炮灰 全师门就我一个人是废柴 反派家的团宠崽崽是神兽 越界臣服 重生之鱼刺救我狗命 修仙:哈哈哈鸡汤来咯 萌宝来袭:带着空间穿九零 快跑,宿主她不对劲 小哭包她软软糯糯 超甜!重生后左相被我撩到腿软 超真实探案推理游戏 惊!霍总怀里的小娇妻失忆后想逃婚 我和暴君有个崽 荒野求生我靠传播非遗爆红全世界 肆意难撩 女尊之夫郎他娇软又呆萌 穿书后,小茶精在疯批怀里撒娇 拯救六界从谈恋爱开始 重生后前世宿敌说要养我 她的沙雕又暴露了 在虐文里绑定了男主系统 我在末世成了领主大人 玄学老祖上综艺后轰动全球了 我继承了老公的神位