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 实现了源代码结构和函数列表的展示,功能非常强大

2)有了tags就自动支持了

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

4)NERD_commenter.vim 注释插件

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

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

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

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

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

在vimrc中配置如下:

1)taglist.vim

先截个图给大家看下:

taglist

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

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

OK,到这里,我们已经能够成功的显示函数列表和查看函数定义了,阅读代码已经没有问题了,剩下的就是要在写代码过程中用到的插件啦,我们在把VIM打造成一个真正的IDE(3)中继续~

版权所有,转载请注明出处。 http://www.vimer.cn

更适合面向对象语言使用的显示函数列表插件-tagbar.vim

之前在www.vim.org上逛,很惊讶于一个刚发布的插件居然就能获得100多的评分,很是吃惊,看了介绍才知道居然是一个类taglist的插件,并且弥补了一些taglist未...

阅读全文

205则回应给“把VIM打造成一个真正的IDE(2)”

  1. bingoboy说道:

    博主。。那个环境变量是指PATH吗

    [回复]

    Dante 回复:

    是的哈

    [回复]

    bingoboy 回复:

    谢咯。。我回去试下。。。

    [回复]

  2. vimrc配置小建议说道:

    在1)taglist.vim 那段的vimrc配置代码中,第9行的注释( “是否一直处理tags.1:处理;0:不处理)最好并到上一行行尾;或者在之前的配置代码中加入set paste命令。
    不然vimer们在复制这一段到vimrc时最后两行会被自动注释掉。

    楼主的文章写得很好,非常实用,大赞一个!!!

    [回复]

    Dante 回复:

    感谢提醒,已经修改!

    [回复]

  3. bughou说道:

    一个ctags / cscope问题请教:
    我们的c++代码里有很多类,每个类都有一些同名的方法,比如:Initialize(),Resume()之类的,这样在CTRL+] 对这些方法调用进行跳转的时候 这些类一下子都弹出来了,几十个让我选,有没有什么方法,可以根据方法前面的类名或者对象名,智能识别出是哪个类的方法啊?就像vs那样。这个问题一直困扰着我和身边的同事,望赐教。

    [回复]

    Dante 回复:

    这个问题的确是这样。。目前我也没有找到很好的解决方法。。

    [回复]

  4. ccheng说道:

    博主,你之前也用vim开发过java吗?那你用代码补全吗,我现在一直没在vim里面找到好的java补全插件

    [回复]

    Dante 回复:

    嗯, 很早很早了。。有一个叫 Vim Intellisense 貌似可以做到,当时还测试过。

    [回复]

  5. [...] 另外,tags必须在vim运行的当前目录,才能在vim里面正确跳转,当然也不是没有办法解决:settags=”tags的文件路径”即可,不过如果像我前面文章说的那样定义了F12来快速生成tags的话(快速连接),也不会经常用到更改路径吧,哈哈。 [...]

  6. lemon说道:

    这个都是在linux下的么?我下载的ctags-5.8居然是rpm文件,windows下不会用.请教一下,因为我刚接触vim

    [回复]

    Dante 回复:

    windows下也有ctags的,google一下吧,地址我记不清了。。

    [回复]

    lemon 回复:

    呵呵,谢谢回复~这几天一直在弄,已经都整好了,再次感谢

    [回复]

  7. happypeter说道:

    http://happycasts.net/episodes/1
    一个ctags视频

    [回复]

    Dante 回复:

    看了一下,讲的太浅了,不过对入门的朋友很有帮助。

    [回复]

    happypeter 回复:

    感谢关注,在revised版里我会在丰富一些内容的。

    [回复]

    Dante 回复:

    不客气,加油!欢迎分享!

    [回复]

    happypeter 回复:

    Here comes the revised version:

    http://happycasts.net/episodes/25

    [回复]

  8. wayn说道:

    ls好,我问下,有没有哪个补全插件能提示整个tags文件中的function,我现在用的acp阿,neocomplcache阿,都是只能自动提示vim打开的文件中的function阿。求助ing.

    [回复]

    Dante 回复:

    C-X C-O 不行么?

    [回复]

    happypeter 回复:

    try :ptag your_function_in_tags_file

    [回复]

  9. JLQSheenero说道:

    为什么我在.vimrc中加入autocmd BufEnter * lcd %:p:h之后,重启vim,编辑一个文件,用pwd查看当前目录,发现还是启动vim时的目录。但是如果在vim中直接执行autocmd…之后效果是正常的

    [回复]

    Dante 回复:

    加上echo看看是否执行了?

    [回复]

  10. [...] [1] 把VIM打造成一个真正的IDE(1) [2] 把VIM打造成一个真正的IDE(2) [3] 把VIM打造成一个真正的IDE(3). [4] Vim的快速注释插件NerdCommenter 此条目由 [...]

  11. xxx说道:

    请问按不显示C代码函数列表只显示一个窗口,但-vimrc文件可以显示函数列表是怎么回事啊??

    [回复]

    xxx 回复:

    少打了个F3

    [回复]

  12. ypchenry说道:

    你好,我在ubuntu12.04下配置home下.vimrc,syntax enable syntax on filetype plugin indent on 等等后,把vim安装目录下的c.vim cpp.vim等复制到~/.vim/ftplugin/下,不能显示C 语言等语法高亮 ,请问您知道怎么解决么?(加环境变量export TERM=xterm-color也不行)

    [回复]

  13. Y--说道:

    博主你好,
    我在win 下用gvim,当我按v切换到“可视模式“后,光标从方块变成了竖线,而这个竖线是停在方块所选的字的左边,所以,如果只想要选中某一行的最后一个字,好像不行。而在linux下,光标在可视模式下还是方块。
    请问,能否把在win下的GVIM的可视模式下的光标变成还是像linux那样还是方块 。

    [回复]

  14. Y--说道:

    补充请教,
    现在会把光标变成方块了。
    不过本质问题还是没有解决。

    就是windows下,gvim,可视模式下,方块停在的那个字符,如果向左选的话,这个字符是选不中的。向右选是选中的。

    好像在Linux下,不管是向左还是向右,当前字符是选中的了吧。
    如何跟linux一样呢?

    [回复]

    Dante 回复:

    我在windows试了一下是正常的哦,你是不是对光标做了配置。

    [回复]

    Y-- 回复:

    -_- 果然,win下gvim默认有一段vimrc的,非常感谢博主~

    [回复]

  15. zhangqin说道:

    博主,你好,请问这个是什么问题 E488: Trailing characters 呵呵

    [回复]

    Dante 回复:

    呃,一般是字符不对

    [回复]

  16. wing说道:

    博主你好, 你的文章相当实用.
    这次有问题请教:
    我在运行lua, python之类的程序时候, 一般是以 :!lua % 之类来启动的, 但是有时候需要在运行的时候再查看源码, 这时候切换回来就卡的要命…
    然后我想到的是以:!start lua % 来解决… 但是这回不但命令增长了,还要添加额外的语句来让程序停下来.
    请问您有碰到这样的问题没? 应该如何解决?
    谢谢了 :)

    [回复]

  17. Mocker说道:

    windows下,cd到工程目录无法生成.out,cscope: no source files found,神马情况。只有files文件

    [回复]

  18. Mocker说道:

    找到问题了,貌似是中文路径的问题

    [回复]

  19. xxx说道:

    见过的最烂的教程,没有之一

    [回复]

    Dante 回复:

    如果想学别人东西的人都是你这种态度,我很担心互联网上是否还有人愿意分享。

    [回复]

  20. xcxinghai说道:

    你好,看了您的博客,现在c++的代码终于可以自动补全了。但是在补全的代码的时候还有点缺陷。就是弹出的选择的函数的背景颜色是粉红色,选择哪一个函数则是黑色,而我的vim的背景颜色是黑色,所以,最上面喝最下面的函数被选择时,看得很不明显。不知到可不可以自己设置颜色,补全时候的背景?

    [回复]

    Dante 回复:

    可以换个配色,比如 wombat

    [回复]

  21. [...] 但是,只有这个插件暂时效果不佳,需要ctags和cscope的支持。 而我已经在vimrc当中加入了生成tags文件的函数和快捷键映射,设置详见: 把vim打造成一个真正的IDE-2。 [...]

  22. quhuazhou说道:

    博主你好,这个文章非常好,我想问下taglist.vim在哪个地方可以下载,谢谢了~

    [回复]

  23. quhuazhou说道:

    博主请问我读的是android4.1.4的文件系统,如果文件系统更新了,cscope.files和tags也要重新生成么,由于文件系统太大,可不可以只找到改动的地方然后只为改动的地方更新上述2个文件

    [回复]

    Dante 回复:

    我现在已经基本不用cscope了,只用ctag,ctag是支持单独生成某个目录的tags再加载的

    [回复]

  24. fouvy说道:

    建议楼主把
    map :silent! TlistOpen “按下F3就可以呼出了
    这样呼出来之后就可以选择跳到哪个函数拉,(*^__^*) 嘻嘻……

    [回复]

  25. book说道:

    博主你好,请问你使用的是shell下的vim,还是gvim呢?在shell下用vim,像ctags定位之类的会不会很不方便?

    [回复]

  26. lyj说道:

    您好,看了您的教程,收益颇多,我这里出现了问题,麻烦您解答一下,在vim下敲击F12后,vim会白屏,不知道这是什么状况?

    [回复]

  27. 番茄红素说道:

    貌似效果很不错

    [回复]

  28. [...] 加用户信息,那还差的很远哦,就请期待下一篇吧 —–把 VIM打造成一个真正的IDE(2)。 [...]

  29. [...] 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(“$”) | “实现打开同一文件时,vim能够自动记住上一次的位置 exe “normal! g`”" | endif augroup END else set autoindent ” always set autoindenting on “智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点, 但笔者并没有看出来 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就配置好了,但是如果想让它完美支持各种源代码文件,想让它方便的注释,方便的进行代码提示,方便的添 加用户信息,那还差的很远哦,就请期待下一篇吧 —–把 VIM打造成一个真正的IDE(2)。 把VIM打造成一个真正的IDE(2) [...]

  30. 土豆说道:

    求教:我在虚拟机上装了个ubuntu 10.10,上面默认安装的不是ctags,而是etags,这样对咱们的脚本有影响么?
    自动安装时会把ctags自动添加到path里吧??

    [回复]

    Dante 回复:

    没试过。。。

    [回复]

  31. Danny说道:

    请教,我在好几层下用VIM中的Ctrl + ]跳转说找不到这个函数,因为这个函数定义在上上层的另一个文件夹的文件中,请问博主如何解决啊?
    我试过在项目的根目录执行ctags -R,可是不管用

    - -!

    [回复]

  32. 迷城幻境说道:

    博主你好 请教一下 装了ctags和cscope之后并在.vimrc中配置了 为什么一点F12vim就会白屏?而且用鼠标在空的区域内选取就有可以看到了.

    [回复]

  33. vvyang说道:

    博主,你好,按照你的分享设置VIM,感觉不错,这里第49行,貌似多了一个双引号(“),在mac下ctags没有-R参数,需要从新安装一个。还有我这跟lyj和迷城幻想一样,使用F12之后,会白屏,不知道怎么回事。

    [回复]

    波儿 回复:

    白屏的解决办法:

    在上面的Do_CsTag()函数的函数体最后一行插入:
    execute “redraw!”
    建议博主大大也把这句加入您的代码示例中。

    [回复]

  34. icewater说道:

    g:vimrc_iswindows
    g:iswindows
    这两个变量名不一致,下面Do_CsTag()中语句
    if(g:iswindows==1)
    调用g:iswindows变量是否应改为
    if(g:vimrc_iswindows==1)

    [回复]

  35. icewater说道:

    感谢楼主花时间分享vim教程
    g:vimrc_iswindows
    g:iswindows
    这两个变量名不一致,下面Do_CsTag()中语句
    if(g:iswindows==1)
    调用g:iswindows变量是否应改为
    if(g:vimrc_iswindows==1)
    这个问题搞了我好长一段时间,改回来之后按F12就可以生成tags,
    再次感谢

    [回复]

  36. [...] 把VIM打造成一个真正的IDE(2) 虽然这里作者使用的ctags,但其定义的函数已经可以支持cscope,而且跨平台 [...]

  37. [...] 另外,tags必须在vim运行的当前目录,才能在vim里面正确跳转,当然也不是没有办法解决:settags=”tags的文件路径”即可,不过如果像我前面文章说的那样定义了F12来快速生成tags的话(快速连接),也不会经常用到更改路径吧,哈哈。 [...]

  38. belonger说道:

    博主 你好 , 我照你的方法做了。但是在代码补全时提示 “报全能补全(^O^N^P)找不到模式)”,在我的代码根目录下都生产了*out tags 等文件了

    [回复]

  39. […] 另外,tags必须在vim运行的当前目录,才能在vim里面正确跳转,当然也不是没有办法解决:settags=”tags的文件路径”即可,不过如果像我前面文章说的那样定义了F12来快速生成tags的话(快速连接),也不会经常用到更改路径吧,哈哈。 […]

  40. Willie说道:

    博主,你好,我照着你的教程设置到2后,按下F12后没反应,然后在命令行下提示的错误信息为:ctags: Warning: cannot open source file “myfile” : No such file or directory
    想请问你一下,我这个问题是出在哪里,我没有建有“myfile”啊,我试着找了很多资料,但是没有解决,所以想请教你一下!谢谢!

    [回复]

  41. 火冷说道:

    请问这里能搜索博文吗?有方法能方便地找到打造IDE的第1篇?

    [回复]

    朱念洋 回复:

    右上角可以了。。之前不小心把搜索框搞丢了。

    [回复]

    火冷 回复:

    哈哈,网上都说youcompleteme很好用,博主没去试??还想找这个插件的windows版安装教程哈

    [回复]

    朱念洋 回复:

    试过,是还不错,做了很多优化来提升提示的速度,但是感觉还是太卡,就卸载掉了。

    [回复]

    Ocean 回复:

    博主你好,本人新手,在配置的时候把你的代码粘帖了过来,按F12后不会加载出来,终端上闪过 ctags:warning:cannot open source files “.mozilla.firefox/…” 还有能不能详解一下怎样将执行程序加入环境变量,十分感谢

    [回复]

  42. 岩会说道:

    念洋,检查配置用的变量为:g:vimrc_iswindows在后面使用的时候,使用的是:g:iswindows

    [回复]

  43. huhuhaha说道:

    首先确认安装了ctags和cscope,咋安装啊,说明白点行不?

    [回复]

  44. sed2x说道:

    [?1049h[999;999H[6n[1;1H[J[2;1H~[3;1H~[4;1H~[5;1H~[6;1H~[7;1H~[8;1H~[9;1H~[10;1H~[11;1H~[12;1H~[前有<-好像是回车符行号连起来了,qiuzhu ? huifu EMAIL 也可

    [回复]

  45. huixinming说道:

    Hi,博主你好,想请教下为什么我的显示不出来函数列表,我按F12生成了tags,然后按F3,提示“:silent! Tlist”,但就是不出现函数列表,源文件所在的目录也没有中文字符~

    [回复]

发表评论