vim + ctags + cscope + taglist

1. ctags 和 cscope
ctags下载地址:http://ctags.sourceforge.net

下载完成之后,解压,然后执行configure脚本生成Makefile文件,然后make,然后执行sudo make install来安装ctags。

cscope官网地址:http://cscope.sourceforge.net,可以在官网找到下载链接。然后解压,同ctags一样,先执行configure脚本,然后make,然后执行sudo make install来安装。

OK,ctags和cscope安装完成了,就可以在Linux下方便阅读内核源代码了,从此就可以丢掉烦人的sourceinsight了。

首先是ctags,常用的命令是ctags -R *,-R表示递归搜索,生成完成之后,将在当前目录下生成tags文件。那接下来看看如果使用ctags。

1) 查找一个函数名或者变量名,在shell下执行vim -t tag_name。
2) 在一个tag处往下查找所定义处,在tag处执行命令'ctrl + ]',往回查找使用命令'ctrl + T'。
3) 直接查找一个tag,使用命令'ta tag_name'。

OK,我们已经知道大概的ctags用法了。

那再来看cscope用法了,cscope同ctags类似,但比ctags更强大。
同ctags一样,首先需要使用cscope -R -b -q命令来生成cscope数据库,这条命令执行之后,将会在当前目录下生成3个文件,cscope.out、cscope.in.out和cscope.po.out,其中cscope.out是最基本的符号索引,后面两个.out文件是使用'-q'选项生成的,可以加快cscope的索引速度。在默认情况下,cscope生成数据库之后会进入一个查询界面,一般这个界面都是不需要的,所以使用了'-b'选项,如果已经进入了这个界面,可以使用'ctrl+d'来退出。
'-R'选项表示递归搜索。在使用cscope时,如果在项目目录中未找到头文件,会自动到/usr/include/目录中查找,如果不想这样做,可以使用'-k'选项。

cscope默认只解析.c、.h、.l、.y文件,默认是忽略c++和java文件的,虽然cscope是支持的。如果希望解析c++、java文件,需要把这些文件的名字和路径保存在一个cscope.files的文件中,当cscope发现在当前目录中存在cscope.files文件时,就会把cscope.files中列出的文件生成索引数据库,通常使用find命令来生成cscope.files文件,例如:
find . -type f > cscope.files
这条命令会将当前目录下的所有文件都加入到cscope.files文件中(包括子目录下的文件),在使用cscope命令时可以省略掉'-R'选项,因为在cscope.files文件中已经包含了子目录中的文件。、

要在vim中使用cscope,首先使用vim打开一个文件,然后在vim中输入下面的命令:
:cs add cscope.out
即使用cs add命令为vim添加一个数据库,然后就可以使用cs find命令来进行查找了,首先我们输入cs help命令来查看一下帮助:
cscope commands:
add  : Add a new database             (Usage: add file|dir [pre-path] [flags])
find : Query for a pattern            (Usage: find c|d|e|f|g|i|s|t name)
       c: Find functions calling this function
       d: Find functions called by this function
       e: Find this egrep pattern
       f: Find this file
       g: Find this definition
       i: Find files #including this file
       s: Find this C symbol
       t: Find this text string
help : Show this message              (Usage: help)
kill : Kill a connection              (Usage: kill #)
reset: Reinit all connections         (Usage: reset)
show : Show connections               (Usage: show)

那来说明一下这几个选项的意思。
c:	查找调用该函数的函数。
d:	查找该函数调用的函数。
e:	类似于egrep。
f:	查找一个文件,相当于find命令。
g:	查找函数、宏,枚举等定义的地方。
i:	查找include本文件的文件。
s:	查找一个c语言符号。
t:	查找字符串。

注意cscope与ctags结合一起使用,效果更好。

当然,这样敲不停的敲命令是很麻烦的,好在,cscope提供了快捷键,需要在.vimrc中映射一下,例如(来自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>

说明一下,我要使用cs find s命令,需要按下'ctrl+\',然后再迅速的按下's'键,后面的cword即表示当前光标的所处位置。好在cscope可以设置超时,例如:
set timeoutlen=4000
即设置有效时间为4s,默认只有1s。

我们每次打开vim时都需要手动输入cs add命令添加一个数据库,很麻烦的,可以在vim中配置一下,打开vim时自动加入,例如:
" 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


2. taglist插件
要使用taglist插件需要一定条件的,在taglist官网上说了:
* vim 6.0版本或以上。
* ctags 5.0版本或以上。
* 另外还需要在.vimrc中加入下面的内容:
	filetype on

vim taglist插件可以从这里下载:http://vim-taglist.sourceforge.net。下载的taglist是一个.zip文件,解压完成之后我们把其中的plugin、doc这两个目录拷贝到~/.vim目录下去,这两个目录中的内容如下:
├── doc
│   └── taglist.txt
└── plugin
    └── taglist.vim

要在vim中使用taglist,首先需要配置一下~/.vimrc文件,里面内容稍许有点多,大家可以参考taglist的帮助文件。例如:
Tlist_Ctags_Cmd:	指定ctags的安装路径,如果已经在PATH环境变量中的话,该选项是可选的。
Tlist_Use_Right_Window:	在右侧窗口显示,默认在窗口左侧显示。
Tlist_Auto_Open:	在打开vim时自动打开taglist。
Tlist_Exit_OnlyWindow:	如果vim窗口中最后只有taglist时自动退出vim。

例如:
let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
let Tlist_Use_Right_Window = 1
let Tlist_Auto_Open = 1
let Tlist_Exit_OnlyWindow = 1

最后如果要手动打开、关闭taglist可以在vim中输入命令'TlistOpen'、'TlistClose',或者输入命令'q'来退出taglist。

注:taglist中窗口之间切换使用ctrl + ww命令。


最后,以本人使用来看,还是稍显麻烦的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值