习惯了在windows下用sourceInsight编程的人,当然也希望在linux的字符终端下也能有一样酷的软件,这里要介绍给大家的是如题所示的三款软件:vim , ctag 和Taglist 。
很多时候我们需要在多个源程序之间实现函数、宏定义、外部变量等的跳转查询,甚至有时候需要到内核或库源代码里窥视他们真面目,我们也需要有列出程序内部所使用的各个函数、变量、宏等等信息的工具,这些功能仅仅靠vim完成是比较困难的,但也不必失望,因为我们还有两件利器:ctag负责建立标签,为实现文本间关键词实现跳转提供基础,Taglist是一个vim插件,帮助我们罗列程序中所有出现关键词的地方。
以我的系统(ubuntu-i386-9.04)为例,我们分别来看看如何使用它们。
一、ctag
当然,第一步就是要下载它!一条命令搞定:
$sudo apt-get install ctags
如果不幸提示找不到软件包ctags,首先你也许应该update一下你的软件源,还不行的话试试把ctags改成 exuberant-ctags
下载完了你就可以用它来产生我们的标签文件tags 了,tags文件是实现跳转功能的英雄,就是它把我们送到我们想要去的地方的——比如我在我的程序里写了一个库函数foo,在某个时刻我想查看这个库函数本身是怎么实现的?那我只需把光标停在关键词上,再按一下组合键 ( ctrl + ] ) 就会立刻帮我跳转到库函数foo的源代码的地方,按一下组合键 ( ctrl + o ) 就可以跳回来!很厉害吧?当然如果foo是库函数对一个系统调用的封装,你就可以顺着tags 给我们提供的道路跳到内核去查看源代码是怎么写的,当然这期间可能会有不止简单的两层封装定义,但我们一次次跳转就可以深入其里,了解内幕!哈哈!怎么做?全程仅需两步,follow me!
第一步 ,在我们的跳转目的地 执行这条命令:
$ctags -R
比如我想要我的程序能随时去库函数 里查询原型,那我就可以在库函数源代码的顶层目录~/downloads/glibc-2.9下执行上面那条命令:
~$cd ~/downloads/glibc-2.9
~/downloads/glibc-2.9$ctags -R
命令中的选项-R 的意思是:递归地进入当前目录下的所有子目录,把在该目录下的所有文件的关键词(包括函数名、宏、文件名等等关联到一起,并且写入一个tags文件)。当然,你如果想让你的函数可以跳转到内核,那么你应该在内核源代码的顶层目录下执行这条命令。
第二步 ,在/etc/vim/vimrc文件中,添加一句话(权且把他们称为au指令吧,因为它以au开头,注意大小写),写上我们程序的所在地 。例如我在完成了第一步后,在我机器的vimrc中添加的内容如下:
au BufEnter /home/seton/programs/* setlocal tags+=/home/seton/downloads/ glibc-2.9/tags
当然,你要把上面灰色底色标注出来的路径换成你自己机器上的具体路径。其中/home/seton/programs/*的意思是:在该路径下的所有文件(因为用了通配符*)都可以通过tags文件实现跳转(包括其子目录),而这个tags文件,就是由后面这个路径/home/seton/downloads/glibc-2.9/tags指定。帅!也许你会问,那我就干脆写成 /* 就行啦,那么系统中的任何一个文件我都可以跟gilbc-2.9关联,实现跳转,当然你可以这么做,但有时候你并不需要这么做。
这就搞定了,你现在就可以斟杯卡布奇诺享受自由跳转的乐趣了,但我们可以加更多的东西,比如把内核源代码也添加进来,必要时我们就跳到内核中去瞧瞧,怎么实现,如法炮制,先在内核源代码顶层目录执行指令ctags -R,然后在/etc/vim/vimrc文件中再添加一句话即可,当然添加时要把tags所在的路径替换成内核源代码的路径。例如,变成这样:
au BufEnter /home/seton/programs/* setlocal tags+=/home/seton/downloads/ glibc-2.9/tags
au BufEnter /home/seton/kernel_programs/* setlocal tags+=/home/seton/downloads/ linux-2.6.31/tags
当然你还需要一个非常重要的vim命令ts ,因为你要跳转的关键词可能出现在库函数中,也可能出现在内核源码中,也可能同时都有对此关键字的定义,这时候你就要在vim命令模式下敲入:ts 来罗列出所有出现该声明关键词的地方(显然你应该先把光标停在你想要跳转的关键词上面),然后按相应的序号在进行跳转。罗列的次序跟你在vimrc中写au指令的顺序相关,谁写在上面就先罗列谁。
二、Taglist
Taglist是vim的一个插件,可以方便地在终端侧边显示出当前程序所有的函数、宏等信息,支持鼠标双击跳转,对于规模比较大的代码而言,这是一个非常实用功能。
Taglist的使用非常简单,只需在网上下载一个配置文件即可,可以用下面这个链接下载:
http://download.csdn.net/source/249784
下载完了解压,将会蹦出俩文件夹(doc和plugin),然后就潇洒地把这两个文件夹扔到主目录下的隐藏文件夹.vim吧!(没有这个隐藏文件夹的话就mkdir一个)。搞定之后,用vim打开你的程序源码,敲下命令:Tlist 打开列表,再输入一次关闭列表。试试看看效果吧。