法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的环境之后,那么现在就是我们学习怎么用的时候了

function Do_CsTag()
    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中,具体每个命令意义如下:

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 /s/b *.c,*.cpp,*.h,*.java,*.cs > cscope.files"
endif

上面的函数,通过操作系统的不同,用不同的命令实现,将当前目录的源码文件导入到一个叫做cscope.files的文件中。这个文件是cscope用来生成数据库时的默认存储文件列表的文件。
不理解dir命令?看看这篇文章吧

http://hi.baidu.com/moodmusic/blog/item/888856ed309605d7b21cb141.html

silent! execute "!cscope -b"

这个命令就是csope在生成数据库,你会发现生成了一个cscope.out的文件,这个就是生成数据库,实际上如果加上参数-q来加快索引速度的话,还会生成cscope.in.out, cscope.po.out这两个文件,各个参数意义如下:
-b : 默认情况下,cscope在生成数据库后,会进入cscope自己的界面,我们在vim中使用他,当然不希望有这样的界面,就可以用-b来屏蔽掉。

execute "cs add cscope.out"

最后这一步,就是在vim中添加了cscope.out这个数据库。

下面列出cscope的常用生成数据库选项:

-R: 在生成索引文件时,搜索子目录树中的代码,因为我们已经在cscope.files中把所有的文件都打印入了列表中,所以
-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中怎么使用呢?

"cscope find"的用法:
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-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<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>: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中配置了一段代码:

if has("cscope")
    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的配置相关推荐

  1. cygwin 编译linux内核,【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...

    [背景] 折腾: 期间,已用make xxxx_defconfig调用默认配置: 此处,接着去: make menuconfig 去确认和修改配置. [折腾过程] 1.去make menuconfig ...

  2. Win7环境下Cygwin中Git可视化配置(gitk配置)

    我们知道cygwin可以在windows系统中模拟linux开发环境,自然我们也就能够在其中配置git,配置git的教程很多了,网上一搜一大把,这里给一篇吧(不一定保证对),童鞋们可以去看看这篇Win ...

  3. Cygwin复制,粘贴 直接用鼠标在黑框上选区即可,选区结束就已经复制了。cygwin里面Ctrl+V是不能粘贴的,用Shfit+ Insert(键盘上下左右方向键的上面) Cygwin 下切换目

    Cygwin复制,粘贴 直接用鼠标在黑框上选区即可,选区结束就已经复制了.cygwin里面Ctrl+V是不能粘贴的,用Shfit+ Insert(键盘上下左右方向键的上面) Cygwin 下切换目录略 ...

  4. Windows下Nutch的配置

    Nutch是一个开源的.Java实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具. Nutch可以分为2个部分: 抓取部分crawler 抓取程序抓取页面并把抓取回来的数据做成反向索引 搜 ...

  5. windows下安装cygwin以及SeismicUnix在cygwin下的安装(windows下安装linux环境,非虚拟机、非双系统)

    一直想在我的笔记本上装个linux,之前装过win10和Ubuntu双系统,后来觉得卡,就重装了一个单Ubuntu系统,在重复的装软件,各种软件(办公.学习.编程),就连微软的office都已经让我安 ...

  6. cygwin下用arm-xscale-linux-gnueabi交叉编译libcgi

    [背景] 折腾: [记录]用交叉编译器arm-xscale-linux-gnueabi交叉编译一个基于嵌入式Linux的无线HART的项目 期间,却发现,include的路径中有: -I xxx/ar ...

  7. 【VS Code】Windows10下VS Code配置Haskell语言环境

    文章目录 0. Haskell官方资料 1. 下载安装Stack 2. 安装GHC前的准备活动 (1) 直接下载法 (2) 配置镜像源法 3. 实际安装GHC 4. Stack的具体使用 5. 安装低 ...

  8. mysql64如何配置_win7 64位下如何安装配置mysql-winx64(安装记录)

    win7 64位下如何安装配置mysql winx64 1.mysql下载 官方网站下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5. ...

  9. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)

    博客园 首页 新随笔 联系 管理 订阅 <div class="blogStats"><!--done--> 随笔- 556  文章- 38  评论- 77 ...

  10. STM32低功耗模式下GPIO如何配置最节能?

    目录 1.将未使用的GPIO 配置为模拟输入模式 2.调节GPIO 速度 3.GPIO不使用时禁用寄存器时钟 4.避免悬空未使用的引脚 STM32低功耗模式下GPIO如何配置最节能,这里总结了一下四点 ...

最新文章

  1. html页面正则表达式,使用正则表达式计算HTML页面标记
  2. Android 64K解决办法
  3. MySQL部署2002_MySQL入门02-MySQL二进制版本快速部署
  4. 同步数据流语言代码生成工具的研究进展
  5. 哈尔滨现大雾天气 高速封闭航班推迟起飞
  6. mysql 杂记(二)
  7. DateTime::diff
  8. matlab物理应用编程,MATLAB在普通物理中的应用
  9. 201约花鸟画 考c语言试题,全国计算机二级C语言上机100题..doc
  10. java人事考勤打卡小程序源码
  11. VGG16和VGG19网络结构图
  12. Vscode配置ftp连接远程服务器
  13. windows server2019共享选项中网络发现无法启用
  14. cpci检索为什么那么慢_cpci检索论文含金量高吗?
  15. javascript实现数独解法
  16. ural 1818 Fair Fishermen
  17. 基于华为巴龙MH5000-31 5G工业/商业模组开发(二)
  18. NVIDIA Jetson TK1 rosrun rviz segmentation fault的解决方法
  19. NLP中文分词工具比较
  20. Redis安装(完整版)

热门文章

  1. 富士康跳楼事件续集,主管扬言现场把人处理掉,并表示拒不处理善后
  2. 运行aspnet时要求启用windows集成身份验证
  3. 九宫格图片上传可展示,可删除,可添加功能
  4. 未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。
  5. React 入门第一天(小案例和注意细节)
  6. 技术选型和知识点介绍(上)
  7. LINUX下载ant源码并编译
  8. error: ‘VPX_IMG_FMT_RGB32’ undeclared (first use in this function); did you mean ‘VPX_IMG_FMT_NV12’?
  9. VS遍历windows文件夹的代码
  10. 人只会看到他想看的,不想看的视而不见