cscope的快速初始化和使用技巧
##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的快速初始化和使用技巧相关推荐
- Android:相对布局综合小演练—智能家居,按键快速美化的小技巧
一.相对布局综合小演练-智能家居 需要用到的图片 新建一个工程 首先,里面的 android:paddingBottom="@dimen/activity_v ...
- tf调不到keras怎么 回事_格力变频空调快速维修方法及技巧 空调压缩机不到一分钟就停,怎么回事?...
格力变频空调快速维修方法及技巧 一. 室内部分: 1.F1开路:制冷时不启动或启动一下就停机:制热正常,且一直高频运转. 2.F2开路:工作6-10分钟就停机,显示E2停止外机. 3.F2短路:制冷 ...
- 如何快速的学习html5,高效快速学习HTML5的技巧
HTML5是非常新前端必备技能,作为第五代HTML语言,包含的算法.实现的功能都大大超过从前.不同的人学习效率.成果都各不相同,那么如何高效快速学习HTML5呢?学码思前端开发培训老师给大家分享一些小 ...
- java 结构体数组初始化_C数组结构体联合体快速初始化
背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元 ...
- C89,C99: C数组结构体联合体快速初始化
1. 背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组 ...
- spring boot controller 初始化_基于 tyboot 快速初始化 springboot 单体项目
基于 tyboot 快速初始化 springboot 单体项目 tyboot源码: gitee https://gitee.com/magintursh/tyboot github https://g ...
- WorkNC3D沿面精加工快速修圆小技巧
今天分享一个特别好用.操作却超级简单的3D沿面精加工快速修圆的小技巧,助你一招获得完美圆弧刀路. 具体图文演示如下: 两条参数设置一样的刀路,却呈现不一样的刀路形状,用不同的颜色"近距离&q ...
- 计算机键盘快速指南,如何练习盲打(快速学会键盘盲打技巧)
如何练习盲打(快速学会键盘盲打技巧) 在诸如记者招待会之类的信息发布场面里,大家会注意到,有很多人耳目关注着会场声响动静的同时,不用看自己的笔记本电脑键盘,双手就能在电脑键盘上快速地击键打字,把会议的 ...
- 快速发表论文的技巧有哪些
快速发表论文的技巧有哪些?每年一到毕业季的时候,同学们就会面临一个非常重要的问题,那就是论文的写作和发表了.论文写作发表的质量好坏是毕业的大事,这个同时也关系到能否有资格拿到奖学金,其实发表论文不算什 ...
最新文章
- 14 图的基础知识-几种常用的存储结构
- org.apache.ibatis.binding.BindingException原因总结
- linux文件的定义变量的值,linux $变量含义($0,$1,$2,$#,$@) ----linux 基础
- 【paddlepaddle速成】paddlepaddle图像分类从模型自定义到测试
- am5728 是否支持aarch64_am5728开启uart0接口通讯
- jq获取同级元素_jq获取上级、同级、下级元素
- C++学习基础八——重载输入和输出操作符
- .Net Core使用Ocelot网关(二) -鉴权认证
- 【摄影测量原理】第二章:单幅影像解析基础
- Flask入门之上传文件到服务器
- HttpClient通过Post方式发送Json数据
- 三天100元从零开始搭建Hadoop集群
- c++ string详解 assign
- redis php教程pdf,ThinkPHP中简单使用Redis
- 澄甫先生谓古人练拳分四步功夫
- leetcode 31. Next Permutation(字典序的下一个)
- 身份证号校验、身份证照片解析(百度API)
- PostgreSQL中文手册
- 共享计算机如何建快捷方式,创建快捷方式的几种方法
- UV-a1586-分子式
热门文章
- 2022年,小家电向左or向右?
- 24岁,大专毕业两年,现在学软件测试可行吗?(3分钟的建议)
- python数据结构和算法(1)
- Linux 命令(243)—— indent 命令
- 蓝易云:Linux系统命令-indent命令详细介绍.系列【37】
- Android中ToolBarAppbarLayout的基本使用
- 【Tableau作图思路-可视化】扇形图 - 层叠饼图 镶嵌饼图、圆环 经验分享
- signature=b03eb981ac8d43a4fcc09cd9a770d7ee,B03.300 [Categoria DeCS]
- 关于Lua语言的发展前景
- 2.Libgdx扩展学习之Box2D_刚体和形状