cscope使用
[[
]]
[]
再加上
][
一共是 4 个在段落(对于 C 来讲就是函数)间跳转的命令。
总结是:
1,相同就跳到函数的开头:(如果都是左括号或者都是右括号),不同就跳到函数的结尾:
     { 和 } 用来跳到函数的开头。
     [] 和 ][ 用来跳到函数的结尾。
2,左右左右,“左”在前面。前后前后,“前”也在前面。因此左括号打头则表示向前,右括号打头则表示向后:
     [[ 和 [] 用来向前跳
     ]] 和 ][ 用来向后跳
结合起来就是:
[[ 用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][ 用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]] 用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[] 用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处。
1,先想是想往前跳,还是往后跳?
如果是想往前,就摁 [,如果是想往后,就摁 ],然后指头别松开。
2,再想是想到开始处,还是结尾处?
如果是开始处,就再摁一下。如果是结尾处,就摁另一个键。
“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目录就行。
当光标停在某个你要查找的词上时, 按下<C-_>g, 就是查找该对象的定义, 其他的同理.
按这种组合键有一点技巧,按了<C-_>后要马上按下一个键,否则屏幕一闪就回到nomal状态了
<C-_>g的按法是先按"Ctrl Shift -", 然后很快再按"g"
http://blog.chinaunix.net/uid-26316047-id-3377014.html
http://my.oschina.net/u/572632/blog/267471
vimcdoc.sourceforge.net
cscope.sourceforge.net
1、首先,我们要做的是生成cscope文件。
Windows和Linux下都一样,首先定位到你的源代码所在的目录。如果你的源文件里只有.c和.h文件,那么运行下面的命令。
cscope -Rbq
就会生成cscope.out文件。
如果有.cpp的源文件,请参照下面的步骤。Windows在本文下面下载find.exe程序,暂时替代系统自带的find.exe程序。在源代码目录下运行如下的命令:
find ./ -name "*.c" -o -name "*.cpp" -o -name "*.h" > cscope.files
生成cscope.files后再运行命令:
cscope -bq
就会生成三个文件,cscope.out以外的其他两个是加快索引的。
346M -rw-rw-r--   1 op op 346M Apr 30 14:28 cscope.out
 71M -rw-rw-r--   1 op op  71M Apr 30 14:28 cscope.in.out
485M -rw-rw-r--   1 op op 485M Apr 30 14:28 cscope.po.out
2、在vimrc里配置cscope的使用
首先,打开vimrc文件,这是vim的配置文件。不明白的请参见本系列的前面几篇文章。
在vimrc文件里添加如下的语句:
"cscope设置
set cscopequickfix=s-,c-,d-,i-,t-,e-
cs a D:/minixsource/cscope.out D:/minixsource
当然,你得把路径改成你自己的源代码路径。好了,在命令行里输入:
:cs f g boot
就可以查看boot()这个函数的定义了。再输入:
:cs f c boot
就可以查看boot()函数被调用的地方了。是不是很方便呢?但是你可以更方便的进行查找,利用快捷键!要使用快捷键,我们还要对它进行配置。在vimrc文件里再添加如下的语句:
nmap s :cs find s =expand("") :cw    "查找声明
nmap g :cs find g =expand("") :cw     "查找定义
nmap c :cs find c =expand("") :cw    "查找调用
nmap t :cs find t =expand("") :cw    "查找指定的字符串
nmap e :cs find e =expand("") :cw    "查找egrep模式,相当于egrep功能,但查找速度快多了
nmap f :cs find f =expand("") :cw    "查找文件
nmap i :cs find i ^=expand("")$ :cw   "查找包含本文件的文件
nmap d :cs find d =expand("")  :cw   "查找本函数调用的函数
使用上面的快捷键的方法是,将光标定位到你要查找的变量,函数名或者宏定义名处。先按下Ctrl+/,松开后快速按下相应的键,比如按下g,表示查找该函数或者变量的定义;按下c表示查找本函数被调用的地方。功能很强大。
在Windows下有很多好用的IDE,比如Visual Studio(加上Visual Assist 简直好用到没朋友),或免费的source insight,他们都使得看代码时,可以轻松的查找符号(变量,函数名,宏等)的定义与引用。
Linux下也有不少免费且强大的IDE,诸如Eclipse,Code::Blocks,他们都需要额外的安装,过程可能很繁琐。幸运的是,Linux上自带了CSCOPE,让我们轻松浏览代码,查找符号的定义与引用。
CSCOPE是可以独立运行的,而由于VIM是主流编辑器,将他们结合在一起更方便,以下讲述的方法是将CSCOPE作为VIM的插件运行。
Pathogen
由于要用到VIM插件,这里先推荐一个插件管理工具pathogen:https://github.com/tpope/vim-pathogen
从GitHub下载来,只要放到~/.vim/里即可。这样pathogen.vim就存在于: ~/.vim/autoload/pathogen.vim
当有其它插件时,在~/.vim/bundle/下创建一个目录,并将插件放入该目录即能运行。
比如cscope的插件cscope_maps.vim,创建一个目录~/.vim/bundle/cscope_maps/并将cscope_maps.vim放入:~/.vim/bundle/cscope_maps/plugin/中:
~/.vim/bundle/cscope_maps/plugin/cscope_maps.vim
CSCOPE
查看一下本机是否已安装cscope工具,在RHEL上可看到:
# rpm -qa|grep"cscope"
cscope-15.8-7.el7.x86_64
先看看CSCOPE的单独使用:
cd 到某个目录,执行:
# Cscope -R
cscope即递归子目录中的文件,生成一个符号库文件cscope.out,并且还自动进入cscope的交互页面,如图显示了cscope的命令集:
可输入要查找的符号定义或引用,用tab上下切换结果集和命令集。按 CTRL+d 退出该界面。
生成符号库相关命令有:
-R 递归所有子目录中的文件。
-q 生成倒排索引,使得符号查找更快,用这个命令后会多生成两个文件:cscope.in.out, cscope.po.out。
-b 生成符号库,但不自动进入交互界面。
-i 从文件列表中生成符号库 (重要)。
从文件列表生成符号库:
CSCOPE默认只认 *.h, *.c
文件,那要是其它诸如C++或JAVA工程难道就不能用了?如果是这样,那它也不值得被这么广泛推荐了。幸好它提供了–i
选项,对于其它工程,我们先生成一个文件列表。比如C++,这个列表包含文件类型为 *.h, *.c, *.cpp, *.hpp:
# find . -name "*.c" -o -name "*.cpp"-o -name "*.hpp" -o -name "*.h" > cscope.files
然后用指定的文件列表生成符号库:
# cscope -q -b -i cscope.files
和VIM集成:
前面说过CSCOPE可以单独使用,它和VIM集成不外乎在VIM里用快捷键或命令完成符号的查找,即上述交互界面的功能。
步骤:
(1) 下载cscope插件:http://cscope.sourceforge.net/cscope_maps.vim
(2) 按pathogen的要求加入相应目录。
(3) 用VIM打开文件,那么,在VIM里CSCOPE如何知道符号文件cscope.out在哪呢?查看cscope_maps.vim,可看到一段脚本:
" add any cscope database in current directory
if fileradable("cscope.out")
cs add cscope.out
" else add the database pointed to by environment variable
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
可见CSCOPE会自动加载文件所在目录下的符号库,如果没有,则尝试环境变量$CSCOPE_DB 所定义的符号库。我们可以选一种方法。
如果希望集中管理多个项目的符号库,可以设置环境变量$CSCOPE_DB ,为了使该变量永久有效,将其加入/etc/profile里:
export CSCOPE_DB="/cscope_symbols/project_1/cscope.out"
保存退出后重载一下配置:
# source /etc/profile
(4) 这时,打开VIM,查看已加载的符号库:
:cs show
用add还可添加其它库:
:cs add [symbol_path]
(5) 这时,可以用命令或快捷键完成符号查找了,比如命令查找my_variable:
:cs f s my_variable
其中: f 表示find;s表示符号,g表示查找定义,c查找函数调用者,更多请 :help cscope.
另外,改 :cs 为 :scs 则切分窗口显示将跳转到的查找。
快捷键:
打开~/.vim/bundle/cscope_maps/plugin/cscope_maps.vim,可看到它定义了一系列快捷键来实现上述的符号查找:
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>
在VIM中,当光标停在某符号上,按:
CTRL+\, 然后按‘s’,即为对应的命令:cs f s [symbol]
CTRL+\, g, 即为 :cs f g [symbol]
CTRL+\, c, 即为 :cs f c [symbol]
...
将 ‘\’换成空格,则对应了:scs,比如:
CTRL+空格,s,即为 :scsf s [symbol]
Tips:
(1) 如果进入了VIM发现符号查找没有结果,检查一下符号库是否正确加载了 :cs show
(2) VIM启动时可能会警告:找到多个符号库:
line 45:E568: duplicate cscope database not added
想要屏蔽该警告,修改~/.vim/bundle/cscope_maps/plugin/cscope_maps.vim:
将:
set cscopeverbose
改为:
set nocscopeverbose
参考文献:
(1) The Vim/Cscope tutorial: http://cscope.sourceforge.net/cscope_vim_tutorial.html
(2) Cscope – A developer’s tool forbrowsing source code): http://mylinuxbook.com/cscope/
(3) Avoiding duplicate cscope databaseerror within VIM:
https://blogs.oracle.com/natarajan/entry/avoiding_duplicate_cscope_database_error
~/.vimrc文件添加下面内容:
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使用的更多相关文章
- 安装windows下的Cscope
		
http://blog.csdn.net/maxiee/article/details/10034263 Cscope 是一款用于查看大型工程中的代码的软件.它使用方便,支持快速查找 C Symbol ...
 - 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)
		
1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scr ...
 - Sublime Text + CTags + Cscope (部分替代Source Insight)
		
CTags & cscope 下载: CTags+Cscope --- 我的百度云盘下载http://pan.baidu.com/s/1gfyPnuN ctags58.zip --- src ...
 - Linux cscope命令
		
一.简介 Cscope 是一款开源免费的 C/C++浏览工具,自带一个基于文本的用户界面,通过cscope可以很方便地找到某个函数或变量的定义位置.被调用的位置等信息.Cscope对 C /C++支持 ...
 - Env:Cscope安装与配置
		
1. 介绍 Cscope是类似于ctags一样的工具,但可认为他是ctags的增强版. 2. 安装 sudo apt-get install cscope 通过源码安装,参照http://blog.c ...
 - Vim 中使用cscope
		
使用cscope碰到的问题 1. E568: duplicate cscope database not added 根据提示,cscope数据库重复添加了,我使用的是vim7.2版本,而这个版本在已 ...
 - MAC OSX 下安装Cscope
		
续前文,搞定CTAGS之后,需要被搞定的是cscope,依旧是上网拖一把,具体过程如下 #1 下载cscope最新版本 http://cscope.sourceforge.net/#downloa ...
 - cscope 的使用
		
一. cscope安装 1.软件下载:http://sourceforge.net/project/showfiles.php?group_id=4664 2.软件安装: ./configure -- ...
 - Vim Cscope安装与使用
		
问题描述: Cscope是VIM适用的工具和插件,通过Cscope可以方便的获取某个函数的定义以及被那些函数调用 问题解决: (1)Cscope安装 注: ...
 - Vim cscope
		
/********************************************************************** * Vim cscope * 说明: * 之前使用Vim ...
 
随机推荐
- 他们都没告诉你适配 Android N 需要注意什么
			
还记得 6.0 对 Apache Http 库的废除导致的应用崩溃吗?还记得 6.0 中 MAC id 始终返回为空导致的唯一 id 混合生成算法大幅失效吗? 1. Android 中 Java 的实 ...
 - 从高德 SDK 学习 Android 动态加载资源
			
前不久跑去折腾高德 SDK 中的 HUD 功能,相信用过该功能的用户都知道 HUD 界面上的导航转向图标是动态变化的.从高德官方导航 API 文档中 AMapNaviGuide 类的描述可知,导航转向 ...
 - javascript 高级程序设计(三)-数据类型
			
ECMAScript 中所有类型的值都有与这两个Boolean值等价的值 数据类型 转换为true的值 转换为false的值 Boolean true false( String ...
 - VS 2015 update2 装xamarin后,编辑axml文件无智能提示的解决方法。
			
1.从github网上下载xsd文件.地址:https://github.com/atsushieno/monodroid-schema-gen: 2.如果你是以ie或edge浏览器下载的,一定要又键 ...
 - Driving the Activity Lifecycle
			
Before Robolectric 2.2, most tests created Activities by calling constructors directly, (new MyActiv ...
 - sql语句游标的写法
			
当循环查找一张表的信息时,我们得写一张游标来对每条信息进行操作,具体格式如下 DECLARE @fitemid int DECLARE #point_cursor CURSORFORSELECT fi ...
 - PHP 通过随机数获得ASCII 值返回字符。
			
for($i=0;$i<20;$i++){ $Matrix .= chr(65 + rand(0,26)); }
 - c-八进制 转 十进制
			
概述 其实x进制转十进制的算法都差不多,不过如果是针对于字符形式,他们却有点不同.使用指针和数组的形式计算,又不同.这里演示将字符型的数组形式的八进制转成十进制: #include <stdio ...
 - 关于“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问 ”
			
原因:在从远程服务器复制数据到本地时出现“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatas ...
 - ubuntu桌面变空白,或者只有壁纸,任务栏消失的解决办法
			
原因:因为打开了桌面特效的原因,但设置不合导致的. 解决方法:方法一:1.按住Ctrl+Alt+F1切换到字符终端下,输入用户名和密码登录2.输入以下命令删除出错的Compiz配置文件相关目录:rm ...