##1.cscope的安装
sudo apt-get install cscope

##2.cscope脚本的使用
下面是我自己写的一个cscope脚本,用来一个命令完成cscope的初始化操作。

#!/bin/sh
DIR=`pwd`
update=1
change=0
while getopts "d:uc" opt;
docase $opt ind)DIR=$OPTARG;;u)update=1;;c)change=1;;?)echo "invaild option!"exit 1esac
donecd ${DIR}if [ 1 -eq ${change} ]; thenecho "change project cscope database!"res=$(find ${DIR} -name cscope.out)if [ "x"${res} = "x" ]; thenecho "Not found cscope database, generate cscope database!"find ${DIR} -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.filescscope -bkq -i cscope.files ctags -R *export CSCOPE_DB=${DIR}/cscope.outelseecho "Found cscope database:${res}, just change CSCOPE_DB env!"export CSCOPE_DB=${res}fi
elif [ 1 -eq ${update} ]; thenecho "udpate project cscope database!"find ${DIR} -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.filescscope -bkq -i cscope.filesctags -R *export CSCOPE_DB=${DIR}/cscope.out
fiecho CSCOPE_DB_PATH=${CSCOPE_DB}

此脚本是用来自动生成cscope database文件的,把该脚本放在可执行环境中,以后我们在自己的项目代码目录中,直接使用source /bin/cscope.sh即可完成cscope环境的初始化,注意必须要使用source命令,这样才能够使cscope.sh中配置的CSCOPE_DB环境变量在本终端中始终可用。cscope.sh脚本同时支持多种命令,-d命令后可跟具体的项目代码目录,这样可以在其他目录生成对应项目的cscope数据库,-u是用来更新数据库的,-c是用来切换数据库的,如果我们有两个项目要切换,只需要进入到要切换的项目,目录中执行-c或者加上-d指明对应的目录即可。如果不加任何选项,那么cscope.sh默认就会在本目录下执行-u操作,也就是更新数据库操作,如果之前没有生成过数据库,那么它就会新生成一个数据库。所以正常使用下,我们只需要进入到我们的项目目录,然后执行cscope.sh脚本即可,为了更进一步的简化我们的处理,可以在~/.bashrc中添加环境变量:

export PROJECT_INIT="source /bin/cscope.sh"

这样我们进入到对应的项目,只需要执行$PROJECT_INIT即可自动调用到“source /bin/cscope.sh ”命令了,很简单了吧!

##3.cscope的配置

在生成了cscope数据库后,我们还需要对vim进行一些必要的配置来方便我们对cscope的使用:

" set quickfix
set cscopequickfix=s-,c-,d-,i-,t-,e-  " 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 csto=0" add any cscope database in current directory
if filereadable("cscope.out")cs add cscope.out
" else add the database pointed to by environment variable
elseif $CSCOPE_DB != ""cs add $CSCOPE_DB
endif" show msg when any other cscope db added
set cscopeverbose

以上是基本的配置,后面我们可以在增加一些keymap:

"cscope插件热键
nmap cs :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap cg :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap cc :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap cd :cs find d <C-R>=expand("<cword>")<CR><CR>
nmap ct :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap ce :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap cf :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap ci :cs find i ^<C-R>=expand("<cfile>")<CR><CR>  "F6打开quickfix
nmap <F6> :cw<CR>"Ctrl+F6关闭quickfix
nmap <C-F6> :ccl<CR>"F7向后选择quickfix
nmap <F7> :cn<CR>"F8向前选择quickfix
nmap <F8> :cp<CR>

这样利用cs find s和对应的quikcfix窗口,我们可以很方便的跳转到需要的地方。

本人有分享过完整的vimrc的配置,参见另一篇博文:《个人使用的vimrc的配置》
https://blog.csdn.net/rikeyone/article/details/82586253

对应的github地址:https://github.com/rikeyone/cscope-script.git

cscope的快速初始化和使用技巧相关推荐

  1. Android:相对布局综合小演练—智能家居,按键快速美化的小技巧

    一.相对布局综合小演练-智能家居 需要用到的图片 新建一个工程 首先,里面的                 android:paddingBottom="@dimen/activity_v ...

  2. tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...

    格力变频空调快速维修方法及技巧 一. 室内部分:  1.F1开路:制冷时不启动或启动一下就停机:制热正常,且一直高频运转. 2.F2开路:工作6-10分钟就停机,显示E2停止外机. 3.F2短路:制冷 ...

  3. 如何快速的学习html5,高效快速学习HTML5的技巧

    HTML5是非常新前端必备技能,作为第五代HTML语言,包含的算法.实现的功能都大大超过从前.不同的人学习效率.成果都各不相同,那么如何高效快速学习HTML5呢?学码思前端开发培训老师给大家分享一些小 ...

  4. java 结构体数组初始化_C数组结构体联合体快速初始化

    背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元 ...

  5. C89,C99: C数组结构体联合体快速初始化

    1. 背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组 ...

  6. spring boot controller 初始化_基于 tyboot 快速初始化 springboot 单体项目

    基于 tyboot 快速初始化 springboot 单体项目 tyboot源码: gitee https://gitee.com/magintursh/tyboot github https://g ...

  7. WorkNC3D沿面精加工快速修圆小技巧

    今天分享一个特别好用.操作却超级简单的3D沿面精加工快速修圆的小技巧,助你一招获得完美圆弧刀路. 具体图文演示如下: 两条参数设置一样的刀路,却呈现不一样的刀路形状,用不同的颜色"近距离&q ...

  8. 计算机键盘快速指南,如何练习盲打(快速学会键盘盲打技巧)

    如何练习盲打(快速学会键盘盲打技巧) 在诸如记者招待会之类的信息发布场面里,大家会注意到,有很多人耳目关注着会场声响动静的同时,不用看自己的笔记本电脑键盘,双手就能在电脑键盘上快速地击键打字,把会议的 ...

  9. 快速发表论文的技巧有哪些

    快速发表论文的技巧有哪些?每年一到毕业季的时候,同学们就会面临一个非常重要的问题,那就是论文的写作和发表了.论文写作发表的质量好坏是毕业的大事,这个同时也关系到能否有资格拿到奖学金,其实发表论文不算什 ...

最新文章

  1. 14 图的基础知识-几种常用的存储结构
  2. org.apache.ibatis.binding.BindingException原因总结
  3. linux文件的定义变量的值,linux $变量含义($0,$1,$2,$#,$@) ----linux 基础
  4. 【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试
  5. am5728 是否支持aarch64_am5728开启uart0接口通讯
  6. jq获取同级元素_jq获取上级、同级、下级元素
  7. C++学习基础八——重载输入和输出操作符
  8. .Net Core使用Ocelot网关(二) -鉴权认证
  9. 【摄影测量原理】第二章:单幅影像解析基础
  10. Flask入门之上传文件到服务器
  11. HttpClient通过Post方式发送Json数据
  12. 三天100元从零开始搭建Hadoop集群
  13. c++ string详解 assign
  14. redis php教程pdf,ThinkPHP中简单使用Redis
  15. 澄甫先生谓古人练拳分四步功夫
  16. leetcode 31. Next Permutation(字典序的下一个)
  17. 身份证号校验、身份证照片解析(百度API)
  18. PostgreSQL中文手册
  19. 共享计算机如何建快捷方式,创建快捷方式的几种方法
  20. UV-a1586-分子式

热门文章

  1. 2022年,小家电向左or向右?
  2. 24岁,大专毕业两年,现在学软件测试可行吗?(3分钟的建议)
  3. python数据结构和算法(1)
  4. Linux 命令(243)—— indent 命令
  5. 蓝易云:Linux系统命令-indent命令详细介绍.系列【37】
  6. Android中ToolBarAppbarLayout的基本使用
  7. 【Tableau作图思路-可视化】扇形图 - 层叠饼图 镶嵌饼图、圆环 经验分享
  8. signature=b03eb981ac8d43a4fcc09cd9a770d7ee,B03.300 [Categoria DeCS]
  9. 关于Lua语言的发展前景
  10. 2.Libgdx扩展学习之Box2D_刚体和形状