您的位置:首页 > 运维架构 > Linux

将VIM打造成一个IDE

2014-07-05 17:22 441 查看
参考: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的关系:



理解了这三个概念和三者之间的关系,对我们用好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、% 跳转到配对的括号(小括号,方括号,大括号都在次范围),一般用于查看if,while的范围;

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[/code] href="https://github.com/phonzia/cppSyntaxCheck.git" target=_blank>注意:下载后~/.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下载完毕后,就可以使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux ubuntu vim IDE