最后更新于 .

好了,接着前面的两篇,我们今天来写《把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中这样配置:

set completeopt=menu

4)NERD_commenter.vim

注释插件 下载插件

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

"对NERD_commenter的设置
let NERDShutUp=1

这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释。 而其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释。

5)DoxygenToolkit.vim

由注释生成文档,并且能够快速生成函数标准注释 下载地址 这个插件使得vim能够生成标准的函数注释,如图:

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对应的文件,并且分屏,截图如下:

AV

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

Pingbacks

  1. 学习vim | 学编程 on #

    [...] 把VIM打造成一个真正的IDE(3) [...]

  2. gvim安装和配置 | Xeno Joshua on #

    [...] “把VIM打造成一个真正的IDE”系列贴,感觉不错:分为篇1、篇2、篇3 [...]

  3. vim配置攻略-打造自己的IDE | Cherrot on #

    [...] 把VIM打造成一个真正的IDE(3) [...]

  4. 用VIM打造属于自己的IDE | fumin&#039;s blog on #

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

  5. 把VIM打造成一个真正的IDE | Anntony&#039;s personal blog on #

    [...] 把VIM打造成一个真正的IDE(3) [...]

  6. 把VIM打造成一个真正的IDE | Anntony&#039;s personal blog on #

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

  7. 关于vim的问题 - Linux/Unix - 开发者第1834485个问答 on #

    [...] 把VIM打造成一个真正的IDE(3) 回复7楼 &#8211; hqin6:lz感兴趣可以试试http://www.vim.org/&nbsp;&nbsp;这里好多插件~~~ [...]

  8. Mac开发利器之程序员编辑器MacVim学习总结 | 贝明-日月明心 梵册贝叶 on #

    [&#8230;] 把VIM打造成一个真正的IDE(3) [&#8230;]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. isunbo

    isunbo on #

    3篇文章都看完了,但还是有些问题,showfunc.vim插件完全没有效果,omnicppcomplete.vim插件也有问题,提示" -- 全能补全 (^O^N^P) 找不到模式",a.vim插件,使用":AV"命令时新窗口出现在左侧.
    只有注释插件能正常使用.
    我在用户变量里是这么写的path=D:\ConsoleTools;D:\MinGW\bin;
    ConsoleTools目录里有ctags.exe和cscope.exe
    cscope是在http://sourceforge.net/projects/mslk/下载的.有3个文件(cscope.exe和regex2.dll和curses2.dll)

    Reply

    1. Dante

      Dante on #

      嗯啊,关于omnicppcomplete的问题应该是没有生成tags……一定要按照我给的那个命令生成啊,直接!ctags -R 生成的是没有用的。a.vim是默认在左侧分屏哦,好像有配置是可以改的,具体我没有去看,感觉应该够用了,你可以看一下它的官方介绍~ 环境变量应该配置的没有问题,按F12没有效果吗?

      Reply

  2. yelo

    yelo on #

    你好

    能晒晒你的vimrc吗?

    Reply

    1. Dante

      Dante on #

      哇咔咔,当然啦,最近就打算写出来啦~~应该就这几天啦~嘿嘿

      Reply

  3. absolute8511

    absolute8511 on #

    在Vim里面编译和调试的功能啥时候介绍阿,还有svn等等,期待ing

    Reply

    1. Dante

      Dante on #

      哈哈,感谢支持啊,vim中编译调试已经有一篇文章哦:
      http://www.vimer.cn/2009/10/11.html

      关于调试和svn两个功能实际上我之前都有用过相关的插件,但是当时插件还不成熟,所以就没有再细究,这一点倒是提醒了我哦,我一定会安排时间梳理下这些相关功能滴~~ 嘿嘿

      Reply

  4. iam070

    iam070 on #

    你好,我是vim新手。我看到你的这篇文章,讲的

    omnicppcomplete的插件,我下了插件,里面只有3个目录doc autoload after,没有你说的那个目录结构里的文件啊。
    /////////////
    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
    //////////////

    Reply

    1. iam070

      iam070 on #

      我知道了,你这个没有正确缩进=.=

      不过我的omnicppcomplete的插件依旧没有正常工作, 难道跟supertab插件有关?

      Reply

      1. Dante

        Dante on #

        呃,没有尝试过supertab,我觉得c-x c-o挺好的……,你确定tags正确生成了吗?

        Reply

        1. iam070

          iam070 on #

          昨天晚上再弄了一下,弄好了,原先功能已经生效了的,但我没有意识到是oni---的作用=.=

          对了,你在 打造 IDE(2)那篇文章里提供的 showfunc.vim 有点问题,怎么弄都不可以使用,最后下了原版的echofunc.vim 才可以的。

          Reply

        2. iam070

          iam070 on #

          还有 map fg ,这个fg到底是指那个功能键?

          Reply

      2. Dante

        Dante on #

        汗,没法再嵌套了,fg就是普通模式下,按fg两个字母……

        Reply

  5. iam070

    iam070 on #

    我想自动补全c语言标准库函数,补全插件已经装好了,现在就是需要添加标准库函数的tags,不过我一直没弄好。

    到include执行ctags -r *.*,把得到的tag,挪动到VIM目录下的tags/stdlib中,然后在_vimrc文件末尾添加 set tags+=/$VIM/tags/stdlib

    不过这样不行。

    不知道哪里错了,你有什么教程吗?

    Reply

    1. iam070

      iam070 on #

      原先的步骤已经有错误,不过参照你的让C++支持STL自动补全,可以显示STL,但C语言标准库还是不行

      Reply

      1. Dante

        Dante on #

        呵呵,这个本来就是补全C++ STL库的,不知道C补全的具体意思是指?

        Reply

        1. iam070

          iam070 on #

          我知道是你的那篇文章是针对C++STL的,不过我只使用c,所以想针对c语言的标准函数库做一个补全tag,结果没有成功,不知道为什么。

          Reply

  6. iam070

    iam070 on #

    问题出错在我原先给的include文件补全,所以没法生成正确的tags.

    现在好了,哈。

    对于自动补全,现在试验了几个插件,感觉
    autocomplpop+code_complete不错,原先的supertab会跟code_complete冲突。。

    可以看看这个链接http://hi.baidu.com/timeless/blog/item/cb4478f09a1563ca7931aa5d.html

    现在还有几个问题,
    1、跟code_complete的tab还是有冲突,我想把链接中设定的 按Tab键在补全菜单中选择 改为按SHIFT键,不知道为何貌似不存在,只有这样的。。

    2、在插入模式下,如何快速的移动光标?比如到行首和行尾。是不是需要自己绑定,比如&lt;c- 移动到行首

    Reply

  7. ideepblue

    ideepblue on #

    omnicppcomplete.vim
    只是复制文件就够了么?不用设置别的?我复制了文件。然后怎么使用?

    NERD_commenter.vim
    我放在$VIMRUNTIME\plugin 下了,vimrc也编辑了可是使用起来没效果……Ctrl + H无用 cm也不行

    难道有其他设置么?

    望博主答复~谢谢~

    Reply

    1. MadPer

      MadPer on #

      NERD_commenter.vim的话,是不是要在vimrc里加上
      "对NERD_commenter的设置
      let NERDShutUp=1
      "支持单行和多行的选择,//格式
      map ,c
      上面四行?博主有提到,是不是您忘了?
      如果还是不行,不妨试试comments.vim 这款插件,直接复制到插件目录就行,ctrl+c是注释,ctrl+x是取消注释,支持多种文件,支持批量注释~

      Reply

    2. Dante

      Dante on #

      突然想起来,你是不是文件类型检查没有打开呢?
      filetype plugin on

      Reply

      1. ideepblue

        ideepblue on #

        没开这个……单行注释解决了,可是多行注释cm不行……

        Reply

        1. Dante

          Dante on #

          呵呵,需要你打开的文件类型支持多行注释才行哦,比如C++,但是python的话就不支持的~~~

          Reply

          1. ideepblue

            ideepblue on #

            C不支持多行?
            python不支持有点遗憾

            Reply

            1. Dante

              Dante on #

              C肯定支持呀……

              你是不是没有输入对命令?
              ,cm

              Reply

              1. ideepblue

                ideepblue on #

                ,cm 晕 我直接cm的…… 博主你应该加一下引号

                Reply

            2. iMadper

              iMadper on #

              python不支持这个是python自己的问题...想多行注释python的话就ctrl + v,选种你要注释的那些行,然后shift+i,然后输入#,然后安两下esc...更简单的就是用comment.vim插件,直接在普通模式下,输入数字(你要注释的行数)然后ctrl+c,当然了,也可以选中你要注释的文字,然后再ctrl + c. 不过这个只不过是把那些语句都用单行注释给注释了罢了...不算是多行注释...不过用这个插件注释c的时候用的是多行注释的说~

              Reply

      2. Rapunzel

        Rapunzel on #

        nerd comment这个设置好了
        刚看过filetype也是开着的
        但是ctrl+h还是没有反映
        到底是为什么呢
        望回答 谢谢

        Reply

  8. ideepblue

    ideepblue on #

    博主又有新问题了……
    omnicppcomplete.vim这个
    filetype plugin on
    set nocp
    也有写在vimrc中

    omnicppcomplete压缩包中三个目录,放在~/.vim/ 下,放在 ~/.vim/vimfiles 都试过了 ^X^O的结果就是找不到模式

    是说omnicppcomplete只能匹配 "." 或者 "-&gt;" 或者 Class 的东西么?不能匹配函数?

    Reply

    1. Dante

      Dante on #

      呃,我也只匹配类内部的函数,单独的C函数的话,好像确实匹配不了。

      Reply

      1. ideepblue

        ideepblue on #

        有个问题很诡异 同一套配置文件vimrc 在win gvim下c++的public private protected关键词都能正常高亮

        但是在linux vim下 只要public加了":"冒号,高亮就消失了,win下没消失

        何解?博主碰到过么?

        Reply

        1. Dante

          Dante on #

          呃,会这样吗?从来没有遇到过呢,是不是vim的版本不一样?

          Reply

      2. ideepblue

        ideepblue on #

        呃 我知道了 配色方案的问题……杯具

        Reply

  9. 张慧聪

    张慧聪 on #

    能否再介绍一下怎么把gdb揉进去?

    Reply

    1. Dante

      Dante on #

      嗯啊,因为自己一直没有用过集成gdb的需求,所以一直没有试过,已经好多朋友问过我这个问题了,还有集成svn操作,呵呵,我一定抽时间写一下~

      Reply

    2. iMadper

      iMadper on #

      有个vimgdb插件的,不过要在编译前加上个补丁.看你嫌不嫌麻烦了.

      Reply

      1. Dante

        Dante on #

        呃,其实我真的觉得,用Conque Shell更简单一些……

        Reply

  10. Nelson

    Nelson on #

    博主啊,,最近刚开始在Linux下用vim,有个很郁闷的问题想请教一下你哈、

    关于那个set mapleader = “,”,我的vimrc是完全按照那位史上最牛的vimrc做的,为什么我这个 功能好像失效了。
    就是在普通模式下按任何与有关的mapping都不行,例如e: e ~/.vimrc中,按“,e” 进入不了.vimrc,很郁闷啊。。。
    博主有什么建议吗??

    Reply

    1. Nelson

      Nelson on #

      补充一下刚才的帖子,
      按任何与有关的mapping都不行,例如e: e ~/.vimrc中

      Reply

      1. Nelson

        Nelson on #

        哇,,,为什么我写的“ ” 都不见了,,奇怪

        Reply

        1. Nelson

          Nelson on #

          博主,我终于找到问题了,原来我装了两个VIM,我一直在修改的是另外一个VIM的vimrc,囧

          Reply

          1. Dante

            Dante on #

            呵呵,我出去刚回来……
            找到问题就好啊,wordpress会自动转义",是挺奇怪~~

            Reply

  11. Lees

    Lees on #

    楼主你好,我想问一下在windows下用VIM能够断点运行么?能的话能否告之?谢谢了

    Reply

    1. Dante

      Dante on #

      呃,好像是有一个和gdb结合的插件,不过我没用过,可以goolge一下看看~~

      Reply

      1. Lees

        Lees on #

        哦,谢了,我去找找看

        Reply

  12. 执着的初心

    执着的初心 on #

    三篇看完了 感觉没啥帮助啊。

    vim能不能直接调用一个tcl文件,或者是do文件,或者批处理文件?
    并且把cmd返回的信息显示出来?

    Reply

    1. Dante

      Dante on #

      呃,我遇到需要命令回显的情况都会直接在vim脚本中使用python(vim原生支持python脚本),用纯vim脚本调用命令还要抓取回显的数据还真没试过。

      Reply

    2. Dante

      Dante on #

      呃,没说完,python中用popen,呵呵

      Reply

  13. 渡水的疯子

    渡水的疯子 on #

    请问omnicppcomplete能否对自定义的类在::后补全类成员,比如自定义Class A,然后在输入A::的时候补全A中的成员。我已经设了let OminiCpp_MayCompleteScope=1,对于STL中的类如string::均有补全提示,自定义的不行。

    Reply

    1. Dante

      Dante on #

      肯定可以啊,我一直是这样用啊,只要生成一下tags就可以了。

      Reply

      1. 渡水的疯子

        渡水的疯子 on #

        .和-&gt;都可以,但是在Myclass::后就是提示找不到模式

        Reply

        1. Dante

          Dante on #

          我试了一下没问题。

          #include <iostream>
          #include <string>
          #include <vector>
          #include <map>
          using namespace std;
          class A
          {
          public:
          static int f;
          };
          int main(int argc, const char *argv[])
          {
          A::f = 1;
          return 0;
          }

          你忘记写static了吧

          Reply

          1. 渡水的疯子

            渡水的疯子 on #

            嗯!帮助文档中中漏看了这一项,默认是根据当前域决定补全那些内容,类定义外确实要static的,不过设了DisplayMode=1就搞定了,多谢指教!

            Reply

  14. patience

    patience on #

    楼主你好:
    安装了omnicppcomplete后,为什么不能自动弹出匹配窗口呢?命令窗口中提示“用户自定义补全(^U^N^P)找不到模式”,必须按下才能弹出匹配窗口。

    Reply

  15. patience

    patience on #

    补充:
    按下ctrl-x ctrl-o才能弹出匹配窗口,不自动弹出。

    Reply

    1. Dante

      Dante on #

      其实我倒是觉得不自动弹出比较好哦,自动弹出的话会感觉比较卡。
      如果要实时匹配的话,建议试一下NeoComplCache,对输入速度的影响比较小。不过即使这样我也不太喜欢自动匹配。。。

      Reply

      1. patience

        patience on #

        确实如此,现在设置好了自动弹出,感觉挺烦的~~~

        Reply

  16. zybest

    zybest on #

    为什么我装了omnicppcomplete.vim后,出现如下错误:

    处理 /home/king/.vim/plugin/after/ftplugin/c.vim 时发生错误:
    第 2 行:
    E117: 未定义的函数: omni#cpp#complete#Init
    处理 /home/king/.vim/plugin/after/ftplugin/cpp.vim 时发生错误:
    第 2 行:
    E117: 未定义的函数: omni#cpp#complete#Init
    处理 /home/king/.vim/plugin/autoload/omni/cpp/complete.vim 时发生错误:
    第 12 行:
    E117: 未定义的函数: omni#cpp#settings#Init
    第 13 行:
    E121: 未定义的变量: g:OmniCpp_ShowScopeInAbbr
    E15: 无效的表达式: g:OmniCpp_ShowScopeInAbbr
    第 14 行:
    E121: 未定义的变量: g:OmniCpp_ShowPrototypeInAbbr
    E15: 无效的表达式: g:OmniCpp_ShowPrototypeInAbbr
    第 15 行:
    E121: 未定义的变量: g:OmniCpp_ShowAccess
    E15: 无效的表达式: g:OmniCpp_ShowAccess
    请按 ENTER 或其它命令继续

    望博主指点下,谢谢:)

    Reply

    1. Dante

      Dante on #

      不可能呀?能说下操作系统,vim版本?

      Reply

      1. zybest

        zybest on #

        ubuntu 10.10
        vim 7.2.330

        Reply

        1. Dante

          Dante on #

          。。7.2应该也没问题的,我之前一直在用。。
          你是全部解压到.vim目录吗?不会少cp了文件吧?

          Reply

          1. zybest

            zybest on #

            我是在.vim中解压的,应该没有吧,不过我想问下
            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
            这个目录里的.vim文件是要自己从网上下了放进去吗,我解压完omnicppcomplete后,每个目录里就已经有对应的vim了,但是都是只有几行简单的代码,我怀疑是不是这里我没弄明白

            Reply

  17. blindsniper

    blindsniper on #

    博主请指教,在xp, vim73下:
    配置了filetype plugin on

    也按照你的配置做了:
    let NERDShutUp=1
    "支持单行和多行的选择,//格式
    map ,c

    但是NERD_Commenter仍旧完全不起作用,在visual模式里无法输入逗号这个命令,这是为什么呢?

    Reply

    1. Dante

      Dante on #

      不好意思,这个插件现在已经更新了。。不能这样映射了。。
      你直接用,cc之类就可以进行注释了。

      Reply

      1. blindsniper

        blindsniper on #

        悲剧,原来是我没有设置let mapleader = ",",所以逗号一直不起作用,谢谢啦

        Reply

  18. langford

    langford on #

    Hi,您好,那个vim注释插件的快捷健需要如何映射的,我按照默认的配置,注释不起作用,请指教!

    Reply

    1. Dante

      Dante on #

      默认,cc就是可以用的,你尝试打开一个.c的文件试一下?

      Reply

  19. yyzhou

    yyzhou on #

    想问问通过ssh链接主机的方式
    代码提示能出现么?是不是必须得是GUI界面的才行啊?

    Reply

    1. Dante

      Dante on #

      可以,我一直是这样用的。

      Reply

  20. springlie

    springlie on #

    只对于C/C++而言,omnicppcomplete插件与vim自带的new-omin-complete的区别大吗?

    Reply

    1. Dante

      Dante on #

      new-omin-complete?
      vim的万能补全是要自己写函数的吧?所以有了omnicppcomplete,我的理解是这样,不知道对不对。。

      Reply

  21. Yarkee

    Yarkee on #

    照着本文使用ctags,发现用F12键来生成tags文件要等很久很久很久。后来才突然发现,我直接在家目录上按F12,于是,ctags要为整个家目录下所有文件生成tags,一个tags文件32M……

    Reply

    1. 依云

      依云 on #

      不得不说,你很有耐心。。。。我不止一次没注意当前目录,等了几秒不耐烦了才发现不对,Ctrl-C!

      Reply

  22. gadmyth

    gadmyth on #

    如果java的omnicomplete能像omnicppcomplete一样强大就好了

    Reply

    1. Dante

      Dante on #

      我记得大学学java的时候,用过一个windows下的插件,对java补全的支持很好,不过后来不用java,就都删掉了。。。我找找看还能想起啥名字不。。

      Reply

    2. 依云

      依云 on #

      vjde 或者 javacomplete?

      Reply

    3. Dante

      Dante on #

      想起来啦,貌似是
      Vim Intellisense
      印象中对java的支持还不错。。

      Reply

  23. yjjlyyj

    yjjlyyj on #

    博主,我想问下我把omnicppcomplete装好后运行CTAGS后,那里只能自动弹出 struct的。像vector之类的都弹不出,是不是我装的不对呀~

    Reply

    1. yjjlyyj

      yjjlyyj on #

      可以了,看了博主另一篇文章~~

      Reply

  24. Richard27

    Richard27 on #

    你好,请教个问题?不知你的cscope功能用得怎样?我在使用时始终不是很顺手

    Reply

    1. Dante

      Dante on #

      你好,2年前是有用过的。
      后台觉得很多功能上有缺陷,所以只是用ctags了。
      如果需要查找调用方,就直接vimgrep了。。

      Reply

  25. Richard27

    Richard27 on #

    感谢你的答复,确如你所说,我在使用时,也遭遇了很多不便,ctags倒是不错,能自动更新,不过毕竟功能有限,用vimgrep代替csope查找函数引用貌似不能实现准确搜索吧?你是直接把函数名当作简单的字符串来处理的吗

    Reply

    1. fanhe

      fanhe on #

      cscope 对c++的支持不怎么样, 我一般用cscope直接搜索符号的.

      Reply

    2. Dante

      Dante on #

      嗯……搜索的时候实在不行就用上正则…,基本还是够用的。

      Reply

  26. fanhe

    fanhe on #

    IDE, 我写了一个, 现在刚好能用, 暂时支持 Linux, 后续慢慢完善功能啥的. http://www.vim.org/scripts/script.php?script_id=3647

    Reply

    1. Dante

      Dante on #

      不错~~加油!

      Reply

  27. 小杨

    小杨 on #

    omnicppcomplete目录下的.vim不知道往哪丢, 是全部丢:usr/share/vim/vim72/目录下与之目录名相同的目录, 还是.vim文件全丢usr/share/vim/vim72/plugin下啊, 搞晕了...不过按F12当前文件目录下有tags生成...?!先谢了, 大侠...

    Reply

    1. Dante

      Dante on #

      .vim相当于windows下的vimfiles哈。这样应该就能理解了吧?

      Reply

      1. 小杨

        小杨 on #

        用的是ubuntu, 那ominicppcomplete下的目录放:
        “/home/user/.vim/“, 这样对吧....?!
        不过这样放了以后, 没看到效果啊...TnT

        Reply

  28. 小杨

    小杨 on #

    为什么在gvim下打开某目录下的文件时, 没有路径自动补全呢?!
    例如要找开:/home/username/index.cpp

    在gvim下:

    :o /home/username/inde(此时按Tab, 目录下以inde前辍开头的文件只有index.cpp), 没有补全, 什么原因啊..?!

    Reply

    1. Dante

      Dante on #

      使用 :e xxx 吗?

      Reply

      1. 小杨

        小杨 on #

        呵呵,前加e:/home/...这样就可以了, 还是经验不够哇...^^

        Reply

  29. More.YU

    More.YU on #

    <pre lang="cpp" line="1">
    HI,VIMER,最近又在弄VIM,看了你的VIM打造IDE系列,大部分功能都做出来了,不过现在有个缺陷,
    就是“自动补全功能”没全部弄好。
    我现在可以自动提示当前文档中定义过的字符串或者函数,但是我想加上更多的自动提示,
    例如ASCII C中的东西,就比如我键入prin时,能够提示出printf这样的功能,我用ctags在VC的include
    目录下生成了tags文件,拷贝到了vimfiles下的tags目录,并且在vim配置文件中添加了这段:
    set tags+=D:\Program\Vim\tags\c_tag,但依然无法提示。

    另外,我将WDK的头文件也生成了tags文件(28M貌似有点太大),同样的,加了这个配置:set tags+=D:\Program\Vim\tags\wdktags,比如我键入Rtl时,必须按Ctrl+P,才会提示所有包含这个关键字的函数,却不能自动提示。但同时也表明了我某些地方已经配置对了是吗?
    我按照你配置的F12快捷键生成,貌似生成的是当前文档的tags文件么?那么这样的话,岂不是每写一会就要按F12生成一下么?而且,直接在项目的目录下生成这玩意儿,岂不是在源文件中多了几个对非VIM用户来说毫无用处的文件么,可否将这些文件归类呢?

    问题有点多,麻烦VIMER了。。

    </pre>

    Reply

    1. Dante

      Dante on #

      先说一下F12的问题,vim生成tags一般是为那些常用不变的库来用的。。如果想要实时生成,可以做一个定时器,cronttab就可以解决。

      对于补全这里,看一下这篇文章:
      http://www.vimer.cn/?p=768

      Reply

  30. noark9

    noark9 on #

    你好,请教个问题
    公司用的是pro*c的程序,扩展名是pc文件,使用下面方法将pc文件映射为了esqlc类型的文件
    autocmd BufEnter *.pc set filetype=esqlc
    我修改了taglist.vim和生成tags的配置,确实可以生成配置和taglist了,但是在使用自动补全插件的时候,如果无法找到成员,根据网上搜到的结果,增加了下面这一句
    autocmd FileType esqlc set omnifunc=ccomplete#Complete
    但是似乎还是没有效果
    但是.c文件可以正常识别和查找到结构体成员

    Reply

    1. noark9

      noark9 on #

      补充一点,再试了下,发现使用映射的F12第一次生成tags文件后,可以正确找到结构体的成员,但是关了vi再开,就找不到了

      Reply

      1. Dante

        Dante on #

        pro*c补全没有研究过,我觉得你还不如就直接 setf c 简单些。

        关了vi再开找不到,你确定是在统一目录打开的文件吗?或者手工设置:
        set tags+=xxx/tags

        Reply

        1. noark9

          noark9 on #

          设置过tags了,似乎用可以把所有的符号搜索出来,就失败了
          设置为c类型确实补全什么的都有了,但是有的关键字是esqlc里面有的,这样语法着色就没了
          额,虽然想过改c的语法着色的文件,但是,觉得这种不是比较完美的解决方法

          Reply

  31. lworld

    lworld on #

    关于autochdir和pwd的问题:
    当直接点击位于e:\\homework\\hell\test.cpp用Vim打开时,用pwd命令显示的是目录e:\\homework\\hell\,没有问题。但是。。当我直接点击快速启动栏运行vim,输入:e e:\\homework\hell\test.cpp后在接着输入pwd检查当前工作目录是竟然现实的只是E:\\,
    (_vimrc中已经有set autochdir,filetype indent plugin on等设置),实在搞不清楚,如果有时间的话,希望博主可以帮忙,谢谢

    Reply

  32. lworld

    lworld on #

    啊,终于解决了!!!原来需要把”e:\\"改成"e:\",Vim才 会认为该文件是从文件管理器启动,并把当前目录(可用
    :lcd 命令查看)切换到文件所在目录

    Reply

    1. Dante

      Dante on #

      解决了就好呀~
      其实可以尝试一下用/,即使在windows下,vim也会认为可用的~~

      Reply

  33. 松暮囧

    松暮囧 on #

    关于自动补全的,tags文件在哪里生成?写完类之后生成吗,我生成了,但是还是找不到模式。

    Reply

    1. Dante

      Dante on #

      一般是生成在当前目录。你看一下是否有tags文件。

      Reply

      1. 松暮囧

        松暮囧 on #

        谢谢,已经解决了

        Reply

  34. zl

    zl on #

    你好,我想实现LUA语言的自动补全功能
    请问能用你说的方法实现吗?
    又能生成LUA语言tags的工具吗?
    仅仅做代码补全的话,Cscope还是必须的吗?
    望解答下,多谢!!

    Reply

  35. testory

    testory on #

    LZ问下,那个omnicppcomplete安装是怎么装的额,哪些文件放在哪些目录下,木有看太明白的说。。

    Reply

  36. fcb

    fcb on #

    博主,你好。你的文中写到“然后需要生成tags,哈哈,记得我们之前用F12映射的命令吧(把Vim打造成真正的IDE(2))”。可是我的(把Vim打造成真正的IED2)中并没有看到介绍F12映射的命令。所以请问如何生成tags

    Reply

    1. Dante

      Dante on #

      嗯?就是这一段呀:
      首先确认安装了ctags和cscope,并且确认这两个可执行程序所在的目录已经放进环境变量里面。(必须做,否则后边都无法操作)
      在vimrc中配置如下:

      Reply

      1. fcb

        fcb on #

        哦,看到了,谢谢!

        Reply

  37. jy

    jy on #

    hi,关于a.vim的跳转,博主有没有遇到过这种情况:
    src/A.cpp
    inc/A.h
    -------这样OK,但是
    src/dir/A.cpp
    inc/dir/A.h
    多了一层(或者若干层)目录,这样就切不过去了(表现为跳转到一个空文件)

    Reply

    1. Dante

      Dante on #

      嗯,多了一层之后确实就不行了。
      这个恐怕只能通过改代码解决了。

      Reply

  38. Likecer

    Likecer on #

    请问是在omni的那些*.vim里面吗?

    Reply

    1. Likecer

      Likecer on #

      说错了~应该是:
      请问是在omni的那些*.vim里面吗?
      homepath是指的用户文件夹吧,还是VIm安装目录?

      Reply

      1. Dante

        Dante on #

        呃,我不太明白你的意思。。
        你说$HOME 吗?

        Reply

        1. Likecer

          Likecer on #

          《F12》这个发不上去……
          请问是在omni的那些*.vim文件里面《F12》生成Tags吗?
          还有就是%HOMEPATH%是指用户文件夹吧
          谢谢了

          Reply

          1. Dante

            Dante on #

            tags是为源代码文件生成哈,比如cpp文件
            至于homepath我有用到这个变量吗?

            Reply

            1. Likecer

              Likecer on #

              但是请问,我安装了ctags,设置好了path环境变量指向exe,cspose也是,但是在*.vim里面,《F12》一下木有反应呢?

              Reply

              1. Dante

                Dante on #

                呃,当前目录下得有源码文件才行。。

                Reply

  39. nony

    nony on #

    你好,多项目引用时,我在tags文件中已经看到了其他项目的函数,可是在我自己的项目中却没有办法自动补全该函数。
    请求帮助,谢谢

    Reply

    1. Dante

      Dante on #

      嗯?如果命令和我写的一样的话,那就不知道是啥问题了。。并没有深入研究过tags的格式。。

      Reply

  40. 小杨

    小杨 on #

    一个类,两文件,一头一实现,怎么跳到实现文件里包含的其他头呢...?!

    Reply

    1. Dante

      Dante on #

      :ts 可以选择

      Reply

      1. 小杨

        小杨 on #

        可选择的都是当前目录及子目录下的匹配的文件列表.
        如果是系统下的头就跳不过去了...像/usr/local/include下的...TnT

        Reply

  41. 希尔博

    希尔博 on #

    博主说的omnicppcomplete插件智能用快捷键来激发补全吗? 不能用“. -&gt; ::" 来自动机发麻?我按装了,您的关于IDE的三篇文章都看遍了,但是自动提示始终激发不了。

    Reply

  42. 小杨

    小杨 on #

    set completeopt=menu
    设置了后当写"free("还是会用/usr/include/stdlib.h
    的Preview, 因为使用了cscope + ctags...
    网上查了下, set completeopt=menu
    set completeopt-=preview后, 就不会有系统的声明preview, 但按下F12, 生在tags和cscope文件后, 仍会有preview....
    是不是cscope+ctags生成时搜索了呢?

    Reply

    1. Dante

      Dante on #

      理论上是这样的,你看一下completeopt是否成功设置了

      Reply

  43. hyy

    hyy on #

    首先,谢谢vimer的分享,从你这学了很多!然后问个问题!!那个照上面方法配置好之后,按的时候,整个vim界面会白一下,是为什么?而且在退出那个白一下的界面之后,在那些没有代码的地方还是白的!要光标移上去才会变成原来的颜色!

    Reply

  44. hyy

    hyy on #

    首先,谢谢vimer的分享,从你这学了很多!然后问个问题!!那个照上面方法配置好之后,按F12的时候,整个vim界面会白一下,是为什么?而且在退出那个白一下的界面之后,在那些没有代码的地方还是白的!要光标移上去才会变成原来的颜色

    Reply

    1. Dante

      Dante on #

      ctrl-l,你是远程ssh的吧。

      Reply

      1. hyy

        hyy on #

        不是,是在linux下的终端,谢谢回复,问题已解决

        Reply

  45. findingsea

    findingsea on #

    按ctrl+x ctrl+o 始终都是找不到模式,tags文件已经生成了

    Reply

  46. fouvy

    fouvy on #

    "对NERD_commenter的设置
    let NERDShutUp=1
    这个命令在2009年的时候就被移除了。晕。

    Reply

  47. xinc_whu

    xinc_whu on #

    楼主请问下我的omnicppcomplete配置好后总c-x会出现“--X model ******”,再c-o就会“智能补全,找不到模式”
    我的tags文件是好的,这个是咋回事呢 求教

    Reply

  48. AlsoTang

    AlsoTang on #

    提醒一下博主:NERDShutUp选项已经在新版本中被去掉了,所以就不必设置它了。

    Reply

  49. 求教

    求教 on #

    a.vim
    好像有问题,
    比如我的头文件在 xxx/ 下
    源文件在xxx/src/下
    我这样设定path
    set path+=., ./src, ../
    同时也设了set autochdir
    但是还是不能正确在头文件和源文件之间跳转

    Reply

    1. 求教

      求教 on #

      弄错了
      let g:alternateSearchPath = 'sfr:./src,sfr:../,sfr:../include,sfr:../src'

      Reply

  50. liusong

    liusong on #

    初学vim,请教一个问题:我的taglist窗口不显示任何函数名,但是相应的tag是有这些函数标签的,不知道这可能是哪里的问题,怎么样修改

    Reply

  51. Patrick He

    Patrick He on #

    这篇文章中有两张图片已经 not found 了

    Reply

  52. Wizmann

    Wizmann on #

    图挂了~麻烦了~1024~

    Reply

  53. xiao

    xiao on #

    博主 你这个网站布置的很好啊 是自己写的还是的现成的模板 能不能推荐一下啊 毕业设计要用

    Reply

    1. Dante

      Dante on #

      现成的模板:zanblog

      Reply

  54. huixinming

    huixinming on #

    你好,我也遇到同样的问题了,想问下你是怎么解决的,谢谢哈~

    Reply

发表评论