Cygwin下cscope的配置
法1 使用mlcscope
vim当中默认使用cs或者cscope命令
但是cygwin当中的cscope不是使用cscope调用的,而是mlcscope
所以查看本地是否有mlcscope,如有则做软链接
ls /usr/bin/mlcscope
ln -s /usr/bin/mlcscope /usr/bin/cscope
ls /usr/bin/cscope
(如果没有则在Cygwin安装管理器中安装 vim cscope ctags,再做软链接)
cygwin上使用vim+cscope+ctags阅读源码
From: http://blog.csdn.net/linwhwylb/article/details/6526637
1.需要安装的东西
vim
cscope
ctags
在cygwin更新管理中输入上面三个关键词进行搜索即可。
vim当中默认是使用cs或者cscope命令的,但是cygwin当中的cscope不是使用cscope调用的,而是mlcscope。
创建一个软连接即可。
$ ln -s /usr/bin/mlcscope /usr/bin/cscope
进入到源码的目录,执行下面的命令
$ cscope
$ ctags *
生成cscope.out以及tags文件,进入vim,然后执行:cs add cscope.out即可,接下来就可以使用:cs find g 符号
之类的命令进行符号定义搜索了。Ctrl + T返回,Ctrl + ]跳转到目标定义处。
法2 使用cscope for win32
From: http://www.vimer.cn/2009/10/%E5%9C%A8vimgvim%E4%B8%AD%E4%BD%BF%E7%94%A8cscope.html
vim --version | grep cscope确保vim支持cscope
不支持的话要重新编译vim,加上支持选项:
--enable-cscope
下载cscope:
cscope(linux): http://cscope.sourceforge.net/
cscope(windows): http://sourceforge.net/projects/mslk/files/
最后把cscope放进环境变量
搭建好了vim+cscope的环境之后,那么现在就是我们学习怎么用的时候了
if(executable('cscope') && has("cscope") )
if(g:iswindows!=1)
silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
else
silent! execute "!dir /b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"
endif
silent! execute "!cscope -b"
if filereadable("cscope.out")
execute "cs add cscope.out"
endif
endif
endf
调用这个函数就可以用cscope生成数据库,并添加到vim中,具体每个命令意义如下:
silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"
else
silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs > cscope.files"
endif
上面的函数,通过操作系统的不同,用不同的命令实现,将当前目录的源码文件导入到一个叫做cscope.files的文件中。这个文件是cscope用来生成数据库时的默认存储文件列表的文件。
不理解dir命令?看看这篇文章吧
http://hi.baidu.com/moodmusic/blog/item/888856ed309605d7b21cb141.html
这个命令就是csope在生成数据库,你会发现生成了一个cscope.out的文件,这个就是生成数据库,实际上如果加上参数-q来加快索引速度的话,还会生成cscope.in.out, cscope.po.out这两个文件,各个参数意义如下:
-b : 默认情况下,cscope在生成数据库后,会进入cscope自己的界面,我们在vim中使用他,当然不希望有这样的界面,就可以用-b来屏蔽掉。
最后这一步,就是在vim中添加了cscope.out这个数据库。
下面列出cscope的常用生成数据库选项:
-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,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
好了,到了这里,cscope的原理大家应该都清楚了,那么在vim中怎么使用呢?
cs find c|d|e|f|g|i|s|t name
0 或 s 查找本 C 符号(可以跳过注释)
1 或 g 查找本定义
2 或 d 查找本函数调用的函数
3 或 c 查找调用本函数的函数
4 或 t 查找本字符串
6 或 e 查找本 egrep 模式
7 或 f 查找本文件
8 或 i 查找包含本文件的文件
但是谁也不想敲这么多命令吧,所以我在vimrc中建了这样一个映射:
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
实际上就是参考 cscope_maps.vim 这个文件,大家可以去下载他,然后直接放到plugin目录就行。
最后,我们来说一下cscope和ctags的兼容问题。我在vimrc中配置了一段代码:
set cscopequickfix=s-,c-,d-,i-,t-,e-
set csto=0
set cst
set csverb
endif
官方解释如下:
http://vimcdoc.sourceforge.net/doc/if_cscop.html
简单来说,主要功能就是同时搜索ctags和cscope的标签,并且cscope优先扫描。
Tips:
1 windows下的cscope需要设置TMPDIR的环境变量,否则不能cscope -b
2 cscope.files尽量用find生成,应该个人需求不同,譬如.svn不索引,.cxx不索引等等
3 如果生成了cscope.out 但是在其他目录中直接cs add,会不能jump。
解决方法是加上pre-dir
cscope add PATH1/cscope.out PATH2
其中PATH1是cscope.out的pathPATH2是当前目录下可以正确jump到索引处的pre-path
常规的cscope 使用方法:
进入到源码的目录
cscope -Rbq
生成cscope.out以及tags文件 cscope.out, cscope.in.out, cscope.po.out
其中cscope.out是基本的符号索引
后两个文件是使用”-q“选项生成的,可以加快cscope的索引速度。
进入vim,然后执行:cs add cscope.out
接下来就可以使用cscope
cscope add 'PATH' (注意 PATH要加引号 否则在vimrc中可能会报错)
同时可以在vimrc中设立键位绑定
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,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
转载于:https://my.oschina.net/alphajay/blog/42895
Cygwin下cscope的配置相关推荐
- cygwin 编译linux内核,【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...
[背景] 折腾: 期间,已用make xxxx_defconfig调用默认配置: 此处,接着去: make menuconfig 去确认和修改配置. [折腾过程] 1.去make menuconfig ...
- Win7环境下Cygwin中Git可视化配置(gitk配置)
我们知道cygwin可以在windows系统中模拟linux开发环境,自然我们也就能够在其中配置git,配置git的教程很多了,网上一搜一大把,这里给一篇吧(不一定保证对),童鞋们可以去看看这篇Win ...
- Cygwin复制,粘贴 直接用鼠标在黑框上选区即可,选区结束就已经复制了。cygwin里面Ctrl+V是不能粘贴的,用Shfit+ Insert(键盘上下左右方向键的上面) Cygwin 下切换目
Cygwin复制,粘贴 直接用鼠标在黑框上选区即可,选区结束就已经复制了.cygwin里面Ctrl+V是不能粘贴的,用Shfit+ Insert(键盘上下左右方向键的上面) Cygwin 下切换目录略 ...
- Windows下Nutch的配置
Nutch是一个开源的.Java实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具. Nutch可以分为2个部分: 抓取部分crawler 抓取程序抓取页面并把抓取回来的数据做成反向索引 搜 ...
- windows下安装cygwin以及SeismicUnix在cygwin下的安装(windows下安装linux环境,非虚拟机、非双系统)
一直想在我的笔记本上装个linux,之前装过win10和Ubuntu双系统,后来觉得卡,就重装了一个单Ubuntu系统,在重复的装软件,各种软件(办公.学习.编程),就连微软的office都已经让我安 ...
- cygwin下用arm-xscale-linux-gnueabi交叉编译libcgi
[背景] 折腾: [记录]用交叉编译器arm-xscale-linux-gnueabi交叉编译一个基于嵌入式Linux的无线HART的项目 期间,却发现,include的路径中有: -I xxx/ar ...
- 【VS Code】Windows10下VS Code配置Haskell语言环境
文章目录 0. Haskell官方资料 1. 下载安装Stack 2. 安装GHC前的准备活动 (1) 直接下载法 (2) 配置镜像源法 3. 实际安装GHC 4. Stack的具体使用 5. 安装低 ...
- mysql64如何配置_win7 64位下如何安装配置mysql-winx64(安装记录)
win7 64位下如何安装配置mysql winx64 1.mysql下载 官方网站下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5. ...
- Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
博客园 首页 新随笔 联系 管理 订阅 <div class="blogStats"><!--done--> 随笔- 556 文章- 38 评论- 77 ...
- STM32低功耗模式下GPIO如何配置最节能?
目录 1.将未使用的GPIO 配置为模拟输入模式 2.调节GPIO 速度 3.GPIO不使用时禁用寄存器时钟 4.避免悬空未使用的引脚 STM32低功耗模式下GPIO如何配置最节能,这里总结了一下四点 ...
最新文章
- html页面正则表达式,使用正则表达式计算HTML页面标记
- Android 64K解决办法
- MySQL部署2002_MySQL入门02-MySQL二进制版本快速部署
- 同步数据流语言代码生成工具的研究进展
- 哈尔滨现大雾天气 高速封闭航班推迟起飞
- mysql 杂记(二)
- DateTime::diff
- matlab物理应用编程,MATLAB在普通物理中的应用
- 201约花鸟画 考c语言试题,全国计算机二级C语言上机100题..doc
- java人事考勤打卡小程序源码
- VGG16和VGG19网络结构图
- Vscode配置ftp连接远程服务器
- windows server2019共享选项中网络发现无法启用
- cpci检索为什么那么慢_cpci检索论文含金量高吗?
- javascript实现数独解法
- ural 1818 Fair Fishermen
- 基于华为巴龙MH5000-31 5G工业/商业模组开发(二)
- NVIDIA Jetson TK1 rosrun rviz segmentation fault的解决方法
- NLP中文分词工具比较
- Redis安装(完整版)
热门文章
- 富士康跳楼事件续集,主管扬言现场把人处理掉,并表示拒不处理善后
- 运行aspnet时要求启用windows集成身份验证
- 九宫格图片上传可展示,可删除,可添加功能
- 未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。
- React 入门第一天(小案例和注意细节)
- 技术选型和知识点介绍(上)
- LINUX下载ant源码并编译
- error: ‘VPX_IMG_FMT_RGB32’ undeclared (first use in this function); did you mean ‘VPX_IMG_FMT_NV12’?
- VS遍历windows文件夹的代码
- 人只会看到他想看的,不想看的视而不见