将VIM打造成一个IDE

参考:http://blog.csdn.net/zhaoyw2008/article/details/8012757

http://blog.csdn.net/dx2880/article/details/7940351   http://blog.csdn.net/varkychan/article/details/9246643  http://www.cnblogs.com/chijianqiang/archive/2012/10/31/vim-2.html

一、VIM相关的基本概念

基本概念:

Buffer:使用Vim打开的文件都会被加载到内存中,在内存中我们使用Buffer来描述被编辑的文件,一个Buffer对应一个被编辑的文件副本。当我们在完成了一个Buffer的编辑后就可以保存该文件。Buffer不仅包含了文件的内容,也记录了该文件的编辑状态等配置信息,比如激活、隐藏、上次编辑行数等,具体可以查阅帮助文档。用Vim可以打开多个文件同时编辑,也可以把不需要的文件关掉,但这时文件副本依然保存在缓冲区中,我们可以通过 :ls:buffers查看这些Buffer,还可以通过类似:buffer n的方式重新打开文件(n表示Buffer的序号)。当然,我们有更好的方式来处理这些Buffer,那就是CommandTBuffer,要想使用CommandTBuffer,先要安装CommandT插件,请大家记住这个插件的名字,稍后介绍。

Window:是对应Buffer的一个展示窗口。一个Buffer可以对应多个窗口,比如我们可以通过:split filename:vsplit filename命令在多个窗口打开一个文件,当修改某一个窗口的文件是,其他窗口都会同步更新。当然我们也可以在多个窗口打开多个文件,编辑后用:wq保存退出,但是记住,只要没有最终退出Vim进程,那么这些打开的文件Buffer依然保存在缓存区中,可以随时再次打开。

Tab-page:Tab-page就比较容易理解,对应一组窗口,我们可以通过`:tabedit filename`在另一个标签页中打开一个文件,在这个标签页中又可以打开多个窗口。

下面我们来介绍一下Vim中的几个基本概念:Buffer、Window和Tab-page。

下图可以清晰的表达Buffer、Window和Tab-page的关系:

buffer,window,tab

理解了这三个概念和三者之间的关系,对我们用好Vim有非常大的帮助。

vim中有关buffer、windows及tab的概念理解,因为vim中的windows跟我们平时所理解的windows有所不同,其实vim中的buffer就相当于一个文件,windows相当于一个窗口的frame(一个显示区,viewport),tab相当于一个窗口。

也就是说,一个显示区(frame)显示一个文件(buffer),一个窗口(tab)可以有多个显示区(frame)。

tab可以理解为浏览器上的tab,如下图,图中有三个TAB页,每页可以有多个显示区域,每个区域显示不同的HTML文件。


二、原生VIM功能

原生的功能(这些功能不需要任何设置和插件,且只支持一个文件内的代码,跨文件不行,若要跨文件查找则需要安装ctags插件,并配合ctrl+]ctrl+t使用):

1
% 跳转到配对的括号(小括号,方括号,大括号都在次范围),一般用于查看ifwhile的范围;
2
、万能的方括号:方括号主要是用于在匹配的相互符号(一般是括号)之间移动:
[(  
表示将光标移动到匹配的左括号,“])”表示将光标移动到匹配的右括号,同理,如果将小括号变成大括号,就不用我解释了吧?
[/  
表示在注释之间移动
[#  
表示在编译预处理之间移动(不太常用)
[[  
表示回到当前函数最开始的左大括号,这个东西和[+{的区别是,[[肯定是回到函数的左大括号,而[{则有可能移动光标到while或者switch的左大括号……
[i  i
表示identifer,当你看到一个变量却不知道变量类型的时候,就用它看变量的声明(函数也可以)。i还可以大写哦,i大写以后还可以[+tab哦,另外,还可以直接先“[”然后ctrl+i哦,功能很强大,自己去点点看啦……
[d d
表示define,当你想看看某个宏名究竟怎么定义的时候,就用它啦,同样d可以大写……

3
、找定义:
gd  
表示goto defination,查找变量或者函数的定义就用它啦,和[i类似,具体区别自己体验一下便知
gD
小写表示函数内查找,大写表示全局查找(其实只能在一个文件内部,并不是真正的全局)

4
、返回光标:
‘’
是两个单引号,不是双引号,当你用上面的命令找一些东西的时候,有时光标就跑了,这个命令就是让光标赶快回家,也就是回到你查看之前的位置,以便继续写程序……

5
、缩进:
>>
<< c++的输入输出流用的符号一样,这个缩进或者反缩进的量由shiftwidth控制,默认是8个空格。一般来说,这个功能都会和v命令一起用,以实现 整块缩进,当和v一起使用的时候,只需要><即可,也就是只输入一次

6
、多行注释:
谁说vi不能多行注释,ctrl+v,选好行以后,I(大写很重要),然后//,然后两次ESC,搞定,神奇吧?删除还用我教你嘛?ctrl+v,记得选两列哦,然后d一下,搞定……

7
、格式对齐:
vim
一样可以把混乱的格式排列整齐,只要输入“gg=G”,就万事OK……

三、pathogen简介

通常情况下安装vim插件,通常是将所有的插件和相关的doc文件都安装在中一文件夹中,如将插件全部安装在/usr/share/vim/vim73/plugin/目录下,将帮助文档全部安装在/usr/share/vim/vim73/doc/目录下(有的是~/.vim/plugin 和~/.vim/doc)。

这样做带来的后果就是:修改和卸载插件很麻烦,很难弄清楚哪个文件属于哪个插件。


如果用pathogen来管理插件的话,就会变得方便很多了。pathogen让每个插件占有一个单独的目录,解决了文件分散的问题。安装完pathogen之后,只需要在~/.vim/目录下新建一个目录~/.vim/bundle/,并将要安装的所有插件放在~/.vim/bundle/目录下即可以使用。如果要删除某个插件,只需要将~/.vim/bundle/目录下对应的插件目录删除即可。如果想保持某个插件为最新版本,直接从插件的仓库checkout一份代码到bundle目录即可。


1、安装pathogen

pathogen的下载地址为:https://github.com/tpope/vim-pathogen

下载后可以直接解压。pathogen插件只有一个单独的脚本,所谓安装就是把它放在当前用户的 ~/.vim/autoload 目录下即可

即,将解压后的autoload目录连同里面的pathogen.vim插件拷贝到~/.vim/目录下。

2、启用pathogen

要启用pathogen,还需要在~/.vimrc 文件里, filetype plugin indent on 之前的任何地方,加入下面这句:

call pathogen#infect() 

注:这里需要说明一下,该插件不能放到/usr/share/vim/vim73/目录下,而只能放到~/.vim/目录下。要启用pathogen也只能修改~/.vimrc,而不能修改/etc/vimrc (Ubuntu下一般只需要修改~/.vimrc即可。如果使用Fedora,当以root用户打开vim时,如果要使插件或对VIM的配置生效,则需要修改/etc/vimrc文件)。

如果没有~/.vimrc文件,创建该文件并将以下内容拷贝到该文件中:

call pathogen#infect()  
syntax on  
filetype plugin indent on  

要生成帮助文档的话,就在vim下输入:call pathogen#helptags()即可。


关于.vimrc的配置我在这里强调下:

vimrc是vim的配置文件。
如果你配置vim的全局变量,那么就应该是在/etc/vimrc中配置
如果是配置vim的个人变量,那.vimrc这个文件就应该在用户的家目录下。
如果家目录中没有.vimrc,就会使用系统配置文件。不过也可以在家目录下自建.vimrc。

四、安装新插件

到目前为止,pathogen已经启用,要安装新插件,只需要下载该插件,并将其放到~/.vim/bundle/目录下即可。

1、安装NERDTree

例如,要下载安装NERDTree插件,只需要进入到~/.vim/bundle/目录,然后执行以下命令:

git clone http://github.com/scrooloose/nerdtree.git   

下载完成后,会看到~/.vim/bundle/目录下会多出一个新的目录:nerdtree

OK!NERDTree插件已经安装完成了!可以看到这种方式比传统的vim插件安装方式简单多了!

而要卸载该插件也非常简单,只需要在~/.vim/bundle/目录下删除nerdtree目录即可,干净利落!

要更新该插件到最新版本,只需要进入到该目录~/.vim/bundle/nerdtree/,并执行以下命令:

git pull origin  

当然这种安装和更新插件的方法只适用于代码仓库支持git的方法。

对于无法用git下载的插件,就更新bundle里的那个以插件名为名的目录就好。

2、安装tagbar

tagbar可以做为taglist的替代者,在~/.vim/bundle/目录执行安装命令如下:

git clone https://github.com/majutsushi/tagbar.git  


之后同样可以在vimrc文件中设置快捷键:

nmap <F4> :TagbarToggle<CR>   "设置快捷键  
let g:tagbar_width = 40       "设置宽度,默认为40  
autocmd VimEnter * nested :call tagbar#autoopen(1)"打开vim时自动打开  
let g:tagbar_left = 1         "在左侧"  
let g:tagbar_right = 1        "在右侧  

列举几点比taglist优化了的地方:

(1)支持头文件的函数列表显示

tagbar对函数的可见级别也是做了区分的,分别用+ - # 并配合着色来做了区分。

(2)对面向对象的支持更好

taglist虽然也会列出类列表,但是整体还是很不直观。

(3)自动根据文件修改时间来重建

taglist在这一点上体验就很不好,其实明明可以通过这种时间戳的方式来实现。

据说tagbar最好配置ctags使用,效果会更好


3、ctags 插件的安装:

ubuntu 操作系统 sudo apt-get install ctags。

仅仅ctags并没有太大的功能改善,它比vim原生的功能唯一强大的地方就在于是跨文件查找而已,其他的其实没什么。另外,还有一点不方便的,就是如果你不手动ctags -R,那么它永远不会自动更新,怎么办?下载插件autotag.vim
http://www.vim.org/scripts/script.php?script_id=1343
看名字就知道了嘛,自动更新的插件,OK,只要添加好插件,这个插件就会在我们保存的时候,为我们自动更新tags文件啦。


4、安装supertab插件

SuperTab插件的作用是使键盘上的Tab键具有更快捷的自动补齐和上下文提示功能。在~/.vim/bundle/目录下下载并安装该插件:

git clone https://github.com/ervandew/supertab.git  

安装好之后,就可以在vim中直接使用自动补齐功能了。比如,用vim打开一个.c文件,要声明一个unsigned int 类型的变量,只需要输入unsi,之后按Tab键,就会将该关键字自动补齐了,非常好用。


5、cppSyntaxCheck语法检测插件

    一个c++语法检查插件,基本的原理就是利用编译器来检查,获取其结果,并在源文件中标识出对应的行。可以参见以下地址下载:

   http://www.vim.org/scripts/script.php?script_id=4205

git hub 地址:

git clone  https://github.com/phonzia/cppSyntaxCheck.git
注意:下载后~/.vim/bundle/cppSyntaxCheck目录下只有cppSyntaxCheck.vim和README.md两个文件,现在应该在该目录下自己创建一个/plugin和一个/doc目录,然后把cppSyntaxCheck.vim和README.md分别放到这两个目录下,否则插件不会生效

    效果如下图,保存时提示错误和警告,当光标移动到错误或警告行时,会显示错误信息

i=1后面少一个";",则会提示错误

        * 增加了显示和关闭警告的选项

        * 现在在不同buffer之间切换时不会丢失分析结果,无须重新保存来促发分析

        * 增加了一个快捷键,以便跳转到标识的错误处

        * 去除了一个会导致重复检查的问题,提高了检查的速度

        * 修改了默认的编译器选项,以支持更多的语言环境

        * 错误提示现在更完整了

        * 当错误或警告信息太长时,现在只提示存在错误或警告,而不显示错误或警告信息


6、c/h文件间相互切换 -- 插件:A

下载地址:http://www.vim.org/scripts/script.php?script_id=31

a.vim下载后的安装方法同上。

安装好a.vim后有下面的几个命令可以用了:
:A
在新Buffer中切换到c/h文件
:AS
横向分割窗口并打开c/h文件
:AV
纵向分割窗口并打开c/h文件
:AT
新建一个标签页并打开c/h文件
其他还有一些命令, 你可以在它的网页上看看, 我都没用过, 其实也都是大同小异, 找到自己最顺手的就行了.

我在~/.vimrc中增加了一句:
nnoremap <silent> <F12> :A<CR>
意思是按F12时在一个新的buffer中打开c/h文件,这样在写程序的时候就可以不假思索地在c/h文件间进行切换,减少了按键的次数,思路也就更流畅了,阿弥陀佛...


7.minibufexpl.vim : Elegant buffer explorer - 插件

下载方式:git  clone https://github.com/fholgado/minibufexpl.vim.git     

下载后文件夹的名字为minibufexpl.vim,要改成minibufexpl


五、利用pathogen,配置vim语法高亮

vim自身可以设置关键字高亮,却无法设置函数名和自定义的数据结构高亮,可以通过taghighlight插件解决这一问题。

首先安装taghighlight插件,在~/.vim/bundle/目录运行以下命令:(或者直接手动下载到bundle目录即可)

hg clone https://bitbucket.org/abudden/taghighlig
等一小段时间,等待taghighlight下载完毕后,就可以使用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值