在Linux系统下进行开发的时间零零散散算起来也有将近一年半了,刚开始的时候用的最原始的VIM进行简单的代码编辑,那段时间让我熟练了VIM的命令、编辑模式切换,方向移动和命令模式下的经常使用命令,第一次认识到了VIM的强大。以后参与的项目开发,虽然说使用的是Linux系统,可是应用代码的主要编辑工做是在Source Insight下完成的,VIM用的也就少,慢慢地用起来有点手生。可是心里对于VIM的那种简洁、直接和高效依然依依不舍,经常会温习VIM的命令和技巧,一直在找机会掌握VIM进行完成的项目开发。直到这个项目,环境、机会(天时、地利、人和)俱全,我进入了状态~~shell
如今的Linux发行版基本都已经装好了VIM,若是没有,那就须要本身进行安装,最好是VIM7.0以上版本,不过大多数发行版的源默认都是最新版本,除非是本身使用源码按照,就须要注意。数据库
VIM的配置文件:.vimrc,通常都是在用户的home主目录下,该文件决定了VIM启动时的基本环境和可以使用命令、工具等,在VIM的使用中具备举足轻重的地位。网络上有不少大能的.vimrc文件提供参考、下载,大都很是地复杂,强大,并且与系统环境和其使用的插件高度关联,所以在下载他们的文件使用时,最好是确保环境一致,不然不少功能会使用不了,偶尔还可能会出一点莫名其妙的问题。在稍后的文章中我会贴出本人稍显粗糙的.vimrc。vim
VIM的强大在于它的高度可定制性,你彻底能够将它打形成属于你我的的编辑器或者说IDE,这是经过大量的插件和.vimrc配置文件协同实现的。在VIM的官网上你能找到各类插件,若是没找到你须要的,你还能够直接开发插件,而后提供给他人使用。本人还没到这个水平,在这推荐几款经常使用的插件给你们:windows
这些插件在VIM官网上都能找到,下载最新版本就能够,而后就是插件的安装了。VIM在用户的主目录下须要一个运行时目录:.vim/,若是没有就手动建立,以后把下载的插件所有解压到.vim/目录里面,就完成了插件的安装。这个时候在.vim/目录下至少会有两个目录:doc/ 和 plugin/,doc目录存放各插件的帮助文档,plugin目录存放各插件的功能实现vim 脚本。可是对于lookupfile插件,正确安装的话,在.vim/下还应该有一个autoload/目录,里面存放有lookupfile 和genutils插件的autoload版本vim脚本,它们定义了plugin/目录中lookupfile和genutils脚本使用的一些函数。若是没有autoload目录,lookupfile插件将没法使用,会提示相似错误:“E117:Unknown Function lookupfile#OpenWindow(...)"。所以若是你安装完毕后,发现没有autoload目录,你须要手动建立该目录,而后将lookupfile插件和genutils插件包中的autoload版本vim脚本拷贝进去。网络
插件帮助文档的生成:使用vim时,必需要掌握的技能之一就是熟练使用vim的在线帮助文档,在里面能找到你所须要的一切,但你要知道你想知道的东西是什么。上述的各个插件都有完善的帮助文档,但须要将它们添加进vim的在线帮助系统中,以方便查找。这一步很简单:编辑器
敲回车执行命令以后就OK了,如今能够查看一下lookupfile的帮助: :help lookupfile.函数
配置好.vimrc文件后,到此为止VIM自身的环境就准备完毕了,接下来就是外部辅助开发环境。工具
单独VIM一个工具老是不够的,UNIX中的哲学是每个工具专注地完成一件小事,多个工具的联合完成一件大事,从而用有限的工具实现无限的可能。VIM主要是把编辑这一件事实现到极致,经过插件提供一些额外的便利加强编辑,但对于代码的结构化、数据库化管理显然超出了VIM的功能范畴,须要更专注的工具来完成,这就是Ctags 和 Cscope工具。插件
ctags工具提取代码文件中的全部tag,包括全局变量、宏、函数、数据类型等,记录这些tag在文件中的位置和交叉引用,以提供在代码中进行这些tag之间的跳转,方便追本溯源。code
cscope工具也是提取代码文件中的全部tag,可是它记录的数据更详细,经过扫描tag在文件中的使用,创建一个数据库,从而提供查找定义、函数调用及被调用、文本、头文件等更复杂强大的搜索功能。
进行项目开发时,这两个工具几乎不可缺乏,VIM+Ctags+Cscope通常也是项目开发的总体环境(本人如今的开发环境),这个环境已经能够完成一个IDE的开发必备工做了。关于ctags和cscope工具的下载、安装就不在此详述了,安装好之后,能够经过如下的命令查看对应的帮助手册:
<!-- lang: shell --> man ctags man cscope
在以后的文章中我会写一个使用这两个工具的shell脚本,以进行项目开发过程当中的管理和更新。