最近帮老师当助教,顺便接触了一下vim和ctags,说实话,linux之前用的不太多,除了写过几个网络实验箱的驱动程序之外基本上没怎么用过,因此此次也算是个很好的机会吧。linux
对linux稍加熟悉的同窗都确定知道Vi命令,这个是linux自带的编辑工具,应该至关于windows的记事本吧,所谓vim,是一个相似于Vi的文本编辑器,不过在Vi的基础上增长了不少新的特性,Vim广泛被推崇为类Vi编辑器中最好的一个,事实上Vim真正的劲敌来自Emacs的不一样变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码编辑器大奖,又将Emacs推至二线,总的来看,Vim和Emacs一样都是很是优秀的文本编辑器。我记得有个NB的师兄曾经对我说过,在程序员的世界里,Vim和Emacs分别被称之为“神的编辑器”和“编辑器之神”,只是时间长了我如今记不清他俩是怎样一个对应关系了。c++
废话说了很多了,下面说说ctags,摘抄一段维基百科上的定义,帮助理解,“Ctags是一个用于从程序源代码树产生索引文件(或tag文件),从而便于文本编辑器来实现快速定位的实用工具”。在产生的tag文件中,每个tag的入口指向了一个编程语言的对象。这个对象能够是变量定义、函数、类或其余的物件。Ctags是开放源代码的程序。支持Ctags产生的tag文件的编辑器以及编辑器插件包括:Vim,Vile,Lemmy,等等。程序员
下面简单说下ctags的安装,其实在linux下就一句命令:apt-get install ctags,和linux下其余软件的安装同样,简单吧!固然,可能有时候因为源或者其余东西的缘由,你可能单靠这一句命令还搞不定,这时候我推荐一种看起来很笨的方法,不过该方法确实好用,上周五上机的时候有一位同窗就碰到了这样的问题,个人方法就是到官方网站上(http://ctags.sourceforge.net/)下载安装包,而后解压,执行./configure,而后make,make install就OK了,这样安装通常不会有别的问题了。编程
下面简单说下ctags文件,这但是ctags的核心啊,首先须要执行ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .生成一个tags文件,虽然有一大串的参数,可是其实咱们使用的时候直接使用ctags -R .就OK,其中参数R表示递归,.表示全部文件,简单来讲就是在当前目录下递归的对全部代码文件构建源代码树(存储在tags文件中),执行完这个命令之后就能够在当前文件夹下看到生成了一个tags文件,就是这个文件记录了你全部的代码结构,有兴趣的同窗能够打开这个文件看一下,每一行大概的结构是相似这样的:A file.c 12;" d;下面具体解释一下,A就是代码结构树中的标示符(变量、结构体或是函数名称等),file.c就是这个标示符(变量或是结构体、函数等)所在的文件名称,可想而知,随后的12就表示在这个文件中的行数,注意,在行号后面有一个很明显的分隔符(;"),一开始我也没搞懂这个分隔符到底有什么做用,后来查了一下,说是为了兼容Vi,让Vi忽略后面的字段(目测Vi遇到这个符号就不会再读取后面的字段了),后面的d表示这个标示符的类型,好比到底是普通变量,仍是函数名称等,其实这个字段是能够省略的,只不过在生成tags文件的时候都自动生成了。vim
了解了tags文件,下面该真正进入核心了解怎样使用ctags了。在生成了tags文件以后,就能够在使用vim的时候使用ctags的功能了,最经常使用的操做就是快捷键ctrl+]和ctrl+t,若是你在编辑模式下将光标定位到某个标示符,而后进入vim命令模式下按快捷键ctrl+],就会跳转到改标示符的定义,而后经过ctrl+t就会跳转回到上一个位置。固然,你可能会发现按照上面说的极可能不会成功,这是为何呢?缘由就在于vim极可能没有办法知道tags文件的存在,又或者你生成的tags文件中并不包括所要编辑的文件的代码结构信息。针对第一种状况,上面我说的之因此成功就在于你要经过vim编辑的文件和生成的tags文件存在同一个目录下,这样的状况下Vim固然能够很方便的就找到tags文件,因此它可以自动的使用tags文件中的信息实现跳转,若是你的tags文件和要编辑的文件不在同一个文件夹下,那么就须要经过配置Vim来实现,通俗的讲,就是要告诉Vim上哪里去找tags文件,实现的方法比较多,且听我一一道来,第一种,若是你只是临时的使用一次ctags跳转,那么你彻底能够在vim命令模式下使用:set tags=../tags之类的命令来实现,这个命令就是告诉Vim:在我本次编辑过程当中若是我要使用ctags跳转,你就上../tags去找相关的信息就好了(../tags就是你存放的tags文件),这种方法的不便之处就是当你完成本次编辑以后推出保存,下一次编辑一样的文本的时候,Vim又会出现找不到tags的问题,也就是说你告诉它一次只能使用到本次编辑结束(关闭编辑)它就忘记了,为了可以让Vim“永远”记住tags文件的位置,咱们介绍第二个方法,那就是直接边界.vimrc文件,相信稍微了解vim的人都知道这个文件,话说我一个哥们儿曾经就由于丢失了这个文件捶胸顿足整整两天!!!这就是整个Vim的核心配置文件,只须要在其中加入一句话就能够了:set tags+=steve/tags;其中steve/tags改为你的tags文件所在的位置就能够了,这样在每次使用vim的时候他就能自动找到tags文件实现跳转了。windows
下面说一些可能用的很少的,网上不少帖子建议你们map一个快捷键生成tags文件,其实我不是很建议你们这么作,若是只是通常的代码调试,也不必为了图这点儿方便从新去记众多的组合快捷键,另外一方面,若是设定了这样一个快捷键,可能你会习惯性的在每一个文件夹下都生成一个tags文件,其实在一个项目中有一个总体的tags就足够了(可能有些人不一样意这个观点)。
网络
最后补一句,晚上抽空写的第一篇博客,可能有些东西写的不够好,之后慢慢改吧,欢迎交流!
编程语言