马兰花

导航

把VIM打造成一个真正的IDE

 

转载自 www.vimer.cn

 

 

这里所说的IDE主要是指C/C++开发,但是由于笔者之前也搞java和c#开发,所以对这两种语言也会有所兼顾。

这个话题可能要分好几篇文章来写了,今天主要讲一下最简单的,包括vimrc里面的基本配置,让vim能够完美支持各种源码文件;

vimrc配置如下(为简单起见,采取注释的方式直接说明):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

if(has("win32") || has("win95") || has("win64") || has("win16")) "判定当前操作系统类型

let g:iswindows=1

else

let g:iswindows=0

endif

set nocompatible "不要vim模仿vi模式,建议设置,否则会有很多不兼容的问题

syntax on"打开高亮

if has("autocmd")

filetype plugin indent on "根据文件进行缩进

augroup vimrcEx

au!

autocmd FileType text setlocal textwidth=78

autocmd BufReadPost *

\ if line("'\"") > 1 && line("'\"") <= line("$") |

\ exe "normal! g`\"" |

\ endif

augroup END

else

"智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++cindent效果会差一点,但笔者并没有看出来

set autoindent " always set autoindenting on

endif " has("autocmd")

set tabstop=4 "让一个tab等于4个空格

set vb t_vb=

set nowrap "不自动换行

set hlsearch "高亮显示结果

set incsearch "在输入要搜索的文字时,vim会实时匹配

set backspace=indent,eol,start whichwrap+=<,>,[,] "允许退格键的使用

if(g:iswindows==1) "允许鼠标的使用

"防止linux终端下无法拷贝

if has('mouse')

set mouse=a

endif

au GUIEnter * simalt ~x

endif

"字体的设置

set guifont=Bitstream_Vera_Sans_Mono:h9:cANSI "记住空格用下划线代替

set gfw=幼圆:h10:cGB2312

OK,有了上面的基本设置,一个好用的vim就配置好了,但是如果想让它完美支持各种源代码文件,想让它方便的注释,方便的进行代码提示,方便的添加用户信息,那还差的很远哦,

OK,上一篇文章,我们已经配置好了一个可以正常使用的VIM,那么在我们真正来到程序员的VIM世界之前,希望你能在VIM里面再多加下面几个配置。

set go= "无菜单、工具栏"

对,让我真正抛弃鼠标,进入美妙的VIM之旅吧!

首先说说一个IDE应该有的几个功能:

1)源代码结构及函数列表

2)变量定义支持跳转等

3)代码自动补全

当然VIM还给了我们几个小惊喜:

4)快速批量注释与反注释

5)由注释直接生成文档

6)文件头作者信息自动添加

7).cpp和.h文件之间的快速切换

那么接下来,我们久来看看我们将会用到的插件列表。

首先介绍一下一些必备知识,我们需要下面两样东西,来辅助完成vim成为IDE的大业--ctags和cscope,这两样东西不是vim的插件而是可执行程序,linux和windows下都有。ctags主要实现了c、c++、java、c#等语言的智能分析,并声称tags文件,后面所有的包括函数列表显示,变量定义跳转,自动补全等,都要依赖于他。有了tags文件后,只需要在变量上按下 CTRL + ]键,就可以自动跳到变量定义的位置。而cscope据说诞生就是为了来替代ctags的,因为他有着比ctags更加强大的功能,举个例子,ctags只能分析出这个函数在哪里被定义,而cscope除了这一点之外,还能分析出这个函数再哪里被调用。当然cscope目前还是有不少bug的,但是也不影响我们的使用。

1)taglist.vim 实现了源代码结构和函数列表的展示,功能非常强大

showfunc.vim 一个展示C/C++/java/C#函数原型的插件,原本是echofunc.vim但是不支持java,c#,所以我把他改了。下载showfunc.vim

2)有了tags就自动支持了

3)omnicppcomplete.vim 实现写C/C++语言时自动补全

4)NERD_commenter.vim 注释插件

5)DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释

6)这段配置是本人自己写的稍后贴出。

7)a.vim 实现.cpp和.h快速切换

下面一个个的讲解配置:
注意,请先检查是否有如下配置,如果没有请添加:

1

2

3

4

5

6

if(has("win32") || has("win95") || has("win64") || has("win16"))

let g:vimrc_iswindows=1

else

let g:vimrc_iswindows=0

endif

autocmd BufEnter * lcd %:p:h

首先确认安装了ctags和cscope,并且确认这两个可执行程序所在的目录已经放进环境变量里面。(必须做,否则后边都无法操作)

在vimrc中配置如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

map <F12> :call Do_CsTag()<CR>

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>

nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>

nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>

nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>

nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>

nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>:copen<CR>

nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>:copen<CR>

nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>

function Do_CsTag()

let dir = getcwd()

if filereadable("tags")

if(g:iswindows==1)

let tagsdeleted=delete(dir."\\"."tags")

else

let tagsdeleted=delete("./"."tags")

endif

if(tagsdeleted!=0)

echohl WarningMsg | echo "Fail to do tags! I cannot delete the tags" | echohl None

return

endif

endif

if has("cscope")

silent! execute "cs kill -1"

endif

if filereadable("cscope.files")

if(g:iswindows==1)

let csfilesdeleted=delete(dir."\\"."cscope.files")

else

let csfilesdeleted=delete("./"."cscope.files")

endif

if(csfilesdeleted!=0)

echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.files" | echohl None

return

endif

endif

if filereadable("cscope.out")

if(g:iswindows==1)

let csoutdeleted=delete(dir."\\"."cscope.out")

else

let csoutdeleted=delete("./"."cscope.out")

endif

if(csoutdeleted!=0)

echohl WarningMsg | echo "Fail to do cscope! I cannot delete the cscope.out" | echohl None

return

endif

endif

if(executable('ctags'))

"silent! execute "!ctags -R --c-types=+p --fields=+S *"

silent! execute "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ."

endif

if(executable('cscope') && has("cscope") )

if(g:iswindows!=1)

silent! execute "!find . -name '*.h' -o -name '*.c' -o -name '*.cpp' -o -name '*.java' -o -name '*.cs' > cscope.files"

else

silent! execute "!dir /s/b *.c,*.cpp,*.h,*.java,*.cs >> cscope.files"

endif

silent! execute "!cscope -b"

execute "normal :"

if filereadable("cscope.out")

execute "cs add cscope.out"

endif

endif

endfunction

1)taglist.vim

先截个图给大家看下:

把taglist.vim放在plugin目录下后,在vimrc中添加如下的配置:

1

2

3

4

5

6

7

8

9

10

11

"进行Tlist的设置

"TlistUpdate可以更新tags

map <F3> :silent! Tlist<CR> "按下F3就可以呼出了

let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行

let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边

let Tlist_Show_One_File=0 "taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1

let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏

let Tlist_Exit_OnlyWindow=1 "taglist是最后一个分割窗口时,自动推出vim

"是否一直处理tags.1:处理;0:不处理

let Tlist_Process_File_Always=0 "不是一直实时更新tags,因为没有必要

let Tlist_Inc_Winwidth=0

showfunc.vim    下载showfunc.vim

截图如下:

这个插件实现了按下fd,就可以提示当前光标所在函数的定义,另外还实现了当输入'('时,会自动匹配tags,展示函数的定义原型。

只需要把这个插件放到plugin下就行,不需要配置。

2)已经在上面解释过,所以这里不再做赘述

OK,到这里,我们已经能够成功的显示函数列表和查看函数定义了,阅读代码已经没有问题了,剩下的就是要在写代码过程中用到的插件啦。

 

好了,接着前面的两篇,我们今天来写《把VIM打造成一个真正的IDE》系列的终结篇。

我们之前已经让在VIM下看代码变得方便与简单,现在我们来让用Vim写代码也一样方便~看完本篇之后,你就可以完全抛弃sourceinsight之类的工具啦~

3)omnicppcomplete.vim 实现写C/C++语言时自动补全  下载插件

惯例,先截图:

其实使用很简单,下载 omnicppcomplete

然后按照说明将插件安装到vimfiles下面,目录结构如下:

after\ftplugin\cpp.vim

after\ftplugin\c.vim

   

autoload\omni\common\debug.vim

\utils.vim

   

autoload\omni\cpp\complete.vim

\includes.vim

\items.vim

\maycomplete.vim

\namespaces.vim

\settings.vim

\tokenizer.vim

\utils.vim

   

doc\omnicppcomplete.txt

然后需要生成tags,哈哈,记得我们之前用F12映射的命令吧(把Vim打造成真正的IDE(2)),按下F12然后去享受吧~~

顺便说一下:omnicppcomplete会打开一个预览窗口来提示变量定义,如果不想要看到详细的信息的话,在vimrc中这样配置:

1

set completeopt=menu

4)NERD_commenter.vim 注释插件 下载插件

也是程序员非常实用的一款插件,支持各种语言的补全,只要你能想到的,放心他绝对注释的了,而且还支持单行注释,批量注释,等各种命令映射,在这里,我把最常用的键映射在vimrc中配置了一下。

1

2

"NERD_commenter的设置

let NERDShutUp=1

这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释。

而其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释。

5)DoxygenToolkit.vim 由注释生成文档,并且能够快速生成函数标准注释 下载地址

这个插件使得vim能够生成标准的函数注释,如图:

1

2

3

4

5

6

7

8

9

map fg : Dox<cr>

let g:DoxygenToolkit_authorName="dantezhu"

let g:DoxygenToolkit_licenseTag="My own license\<enter>"

let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"

let g:DoxygenToolkit_briefTag_pre = "@brief\t"

let g:DoxygenToolkit_paramTag_pre = "@param\t"

let g:DoxygenToolkit_returnTag = "@return\t"

let g:DoxygenToolkit_briefTag_funcName = "no"

let g:DoxygenToolkit_maxFunctionProtoLines = 30

读者可以需要将 DoxygenToolkit_authorName设置成为自己的名字,OK,这样标准格式的代码注释就出来啦。

5)a.vim .cpp和.h文件快速切换 下载地址

把下载的a.vim放到plugin下,不需要配置。

直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏,截图如下:

OK,如果你按照我的说明将vim配置了下来,那么你的vim应该已经是一个超级强悍的IDE啦,快去写写代码试试吧,是不是和之前很是不同了啊,哈哈。

 

 

posted on 2011-02-09 17:31  笨鸟快飞  阅读(431)  评论(0编辑  收藏  举报