vim + ctags + cscope + taglist

来源:互联网 发布:淘宝手机详情怎么设置 编辑:程序博客网 时间:2024/05/18 02:41
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 stringhelp : 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 directoryif filereadable("cscope.out")    cs add cscope.out  " else add the database pointed to by environment variable elseif $CSCOPE_DB != ""    cs add $CSCOPE_DBendif


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 = 1let Tlist_Auto_Open = 1let Tlist_Exit_OnlyWindow = 1

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

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


最后,以本人使用来看,还是稍显麻烦的。
0 0
原创粉丝点击