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

好了,接着前面的两篇,我们今天来写《把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对应的文件,并且分屏,截图如下:

AV

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

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





原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]

本文链接地址: http://www.vimer.cn/?p=150

125 个评论 在 “把VIM打造成一个真正的IDE(3)”

  1. isunbo 说:

    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)

    [回复]

    Dante 回复:

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

    [回复]

  2. yelo 说:

    你好

    能晒晒你的vimrc吗?

    [回复]

    Dante 回复:

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

    [回复]

  3. absolute8511 说:

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

    [回复]

    Dante 回复:

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

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

    [回复]

  4. iam070 说:

    你好,我是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
    //////////////

    [回复]

    iam070 回复:

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

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

    [回复]

    Dante 回复:

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

    [回复]

    iam070 回复:

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

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

    [回复]

    iam070 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  5. iam070 说:

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

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

    不过这样不行。

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

    [回复]

    iam070 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

    iam070 回复:

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

    [回复]

  6. iam070 说:

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

    现在好了,哈。

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

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

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

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

    [回复]

  7. ideepblue 说:

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

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

    难道有其他设置么?

    望博主答复~谢谢~

    [回复]

    MadPer 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

    ideepblue 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

    ideepblue 回复:

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

    [回复]

    Dante 回复:

    C肯定支持呀……

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

    [回复]

    ideepblue 回复:

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

    [回复]

    iMadper 回复:

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

    [回复]

  8. ideepblue 说:

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

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

    是说omnicppcomplete只能匹配 “.” 或者 “->” 或者 Class 的东西么?不能匹配函数?

    [回复]

    Dante 回复:

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

    [回复]

    ideepblue 回复:

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

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

    何解?博主碰到过么?

    [回复]

    Dante 回复:

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

    [回复]

    ideepblue 回复:

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

    [回复]

  9. 张慧聪 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    iMadper 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  10. Nelson 说:

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

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

    [回复]

    Nelson 回复:

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

    [回复]

    Nelson 回复:

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

    [回复]

    Nelson 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  11. Lees 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    Lees 回复:

    哦,谢了,我去找找看

    [回复]

  12. 执着的初心 说:

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

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

    [回复]

    Dante 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  13. 渡水的疯子 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    渡水的疯子 回复:

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

    [回复]

    Dante 回复:

    我试了一下没问题。

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

    你忘记写static了吧

    [回复]

    渡水的疯子 回复:

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

    [回复]

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

  15. patience 说:

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

    [回复]

  16. patience 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    patience 回复:

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

    [回复]

  17. zybest 说:

    为什么我装了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 或其它命令继续

    望博主指点下,谢谢:)

    [回复]

    Dante 回复:

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

    [回复]

    zybest 回复:

    ubuntu 10.10
    vim 7.2.330

    [回复]

    Dante 回复:

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

    [回复]

    zybest 回复:

    我是在.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了,但是都是只有几行简单的代码,我怀疑是不是这里我没弄明白

    [回复]

  18. blindsniper 说:

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

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

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

    [回复]

    Dante 回复:

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

    [回复]

    blindsniper 回复:

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

    [回复]

  19. langford 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  20. yyzhou 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  21. springlie 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  22. Yarkee 说:

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

    [回复]

    依云 回复:

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

    [回复]

  23. gadmyth 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    依云 回复:

    vjde 或者 javacomplete?

    [回复]

    Dante 回复:

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

    [回复]

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

  25. yjjlyyj 说:

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

    [回复]

    yjjlyyj 回复:

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

    [回复]

  26. Richard27 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  27. Richard27 说:

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

    [回复]

    fanhe 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  28. fanhe 说:

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

    [回复]

    Dante 回复:

    不错~~加油!

    [回复]

  29. 小杨 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    小杨 回复:

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

    [回复]

  30. 小杨 说:

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

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

    [回复]

    Dante 回复:

    使用 :e xxx 吗?

    [回复]

    小杨 回复:

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

    [回复]

  31. More.YU 说:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    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了。。

    [回复]

    Dante 回复:

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

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

    [回复]

  32. noark9 说:

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

    [回复]

    noark9 回复:

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

    [回复]

    Dante 回复:

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

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

    [回复]

    noark9 回复:

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

    [回复]

  33. lworld 说:

    关于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等设置),实在搞不清楚,如果有时间的话,希望博主可以帮忙,谢谢

    [回复]

  34. lworld 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  35. 松暮囧 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    松暮囧 回复:

    谢谢,已经解决了

    [回复]

  36. zl 说:

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

    [回复]

  37. testory 说:

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

    [回复]

  38. fcb 说:

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

    [回复]

    Dante 回复:

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

    [回复]

    fcb 回复:

    哦,看到了,谢谢!

    [回复]

  39. jy 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  40. Likecer 说:

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

    [回复]

    Likecer 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

    Likecer 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

    Likecer 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  41. nony 说:

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

    [回复]

    Dante 回复:

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

    [回复]

  42. 小杨 说:

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

    [回复]

    Dante 回复:

    :ts 可以选择

    [回复]

    小杨 回复:

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

    [回复]

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

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

我要评论

*

*