Vim编辑器被称为“编辑器之神“,是Linux系统中最常用的两个文本编辑器之一(另一个是被称为“神之编辑器”的Emacs)。GVim是图形化的Vim,很多版本的Linux都将GVim作为系统的一部分预装在客户端,但是最原始的GVim界面简单,功能都需要通过命令来实现,无形中提高了学习Vim的难度。
虽然Vim入门较难,但是能够一直作为Linux常用文本编辑器之一,主要取决于它的可定制性。除了通过修改配置文件.Vimrc开启或关闭Vim功能外,我们还可以找到很多插件(或者自己编写插件)来扩展Vim的功能。下面就列举一些常用的GVim插件。
1、Ctags
下载地址:http://ctags.sourceforge.net/
功能:扫描指定的源文件,找出其中所包含的语法元素,并将找到的相关内容记录下来。
安装:下载ctags-x.x.tar.gz并解压,进入解压后的文件夹运行./configure && make && make INSTALL。
使用:$ctags -R
2、taglist
下载地址:http://www.vim.org/scripts/script.php?script_id=273
功能:查看Vim编辑文件包含的函数列表,或是类包含的方法列表。
安装:
1)下载taglist;
2)解压后将plugin和doc文件夹中的文件分别拷贝至$HOME/.vim文件夹内对应的目录结构中。
3)重启GVim,输入:TlistToggle打开/关闭taglist窗口。
配置:添加以下代码到$HOME/.vimrc
""""""""""""""""""""""""""""""""""""""""""""""
" Taglist
""""""""""""""""""""""""""""""""""""""""""""""
nmap
let Tlist_Auto_Open = 1 " 启动vim自动打开taglist窗口
let Tlist_Use_Right_Window = 1 " 设置taglist窗口出现在右侧
let Tlist_File_Fold_Auto_Close = 1 " taglist只显示当前文件tag,其它文件的tag都被折叠起来
let Tlist_Exit_OnlyWindow = 1 " 如果taglist窗口是最后一个窗口退出vim
let Tlist_Sort_Type = "name" " 设置taglist以tag名字进行排序
let Tlist_Use_SingleClick = 1 " 单击tag就跳转
let Tlist_Process_File_Always = 1 " 设置taglist始终解析文件中的tag,不管taglist窗口有没有打开
map
if has("gui_running")
let Tlist_Inc_Winwidth = 0
else
let Tlist_Inc_Winwidth = 1
endif
3、minibufexpl
下载地址:http://www.vim.org/scripts/script.php?script_id=159
安装:下载minibufexpl.vim到$HOME/.vim/plugin/文件夹。
功能:显示已打开的文件列表。
配置:添加以下代码到$HOME/.vimrc
""""""""""""""""""""""""""""""""""""""""""""""
" minibufexpl.vim
""""""""""""""""""""""""""""""""""""""""""""""
" ctrl+tab shift+ctrl+tab 切换缓冲区里的文件
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplModSelTarget = 1
使用:CTRL+TAB在不同文件之间切换。
4、NERD tree
下载地址:http://www.vim.org/scripts/script.php?script_id=1658
功能:在Vim侧边增加窗口显示文件树形目录。
安装:下载nerdtree.zip文件,解压缩之后,把plugin/NERD_tree.vim 和doc/NERD_tree.txt分别拷贝到$HOME/.vim/plugin 和$HOME/.vim/doc 目录。
配置:添加以下代码到$HOME/.vimrc
""""""""""""""""""""""""""""""""""""""""""""""
" NERDTree
""""""""""""""""""""""""""""""""""""""""""""""
map
let NERDTreeMinimalUI = 1 " 关闭书签标签('Press ? for help')
let NERDTreeDirArrows = 1 " 改变目录结点的显示方式(+/~)
5、代码补全
1)Autocomplpop
vim自带的代码补全功能在编辑代码时需要键入ctrl+n才能弹出智能提示菜单。而大多数IDE中,只要代码输入到相应的位置,补全提示就会自动的弹出来。因此需要给vim增加插件支持这些功能。Autocomplpop就是这样一个插件。
下载地址:http://www.vim.org/scripts/script.php?script_id=1879
功能:代码自动补全
安装:下载vim-autocomplpop.zip文件,解压缩之后,把相应的文件分别拷贝到$HOME/.vim/plugin 和$HOME/.vim/doc 目录。
2)OmniCppComplete
Autocomplpop的自动提示功能虽然可以实现提示但是对于C、C++开发者来说并不完善,例如不能自动补全类成员,因此需要OmniCppComplete配合使用。
下载地址:http://www.vim.org/scripts/script.php?script_id=1520
安装:下载vim-autocomplpop.zip文件,解压缩至$HOME/.vim/目录下。
配置:添加以下代码到$HOME/.vimrc
""""""""""""""""""""""""""""""""""""""""""""""
" OmniCppComplete配置
""""""""""""""""""""""""""""""""""""""""""""""
set nocp
filetype plugin on
map
set completeopt=menu
set cindent
:inoremap ( ()
:inoremap )
:inoremap { {}
:inoremap }
:inoremap [ []
:inoremap ]
:inoremap < <>
:inoremap >
:inoremap " ""
:inoremap ' ''
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\
else
return a:char
endif
endf
生成系统tags文件
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/tags/systags /usr/include /usr/local/include
在vimrc末尾加入如下命令:
let OmniCpp_GlobalScopeSearch = 1 " 0 or 1
let OmniCpp_NamespaceSearch = 1 " 0 , 1 or 2
let OmniCpp_DisplayMode = 1
let OmniCpp_ShowScopeInAbbr = 0
let OmniCpp_ShowPrototypeInAbbr = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_MayCompleteDot = 1
let OmniCpp_MayCompleteArrow = 1
let OmniCpp_MayCompleteScope = 1
set tags+=~/.vim/tags/systags
set tags+=tags
Autocomplpop和OmniCppComplete的使用前提是已经安装了Ctags,使用Ctags生成tag文件后才能正常使用这两个插件。