让Vim(gvim)支持C++STL库的自动补全
在使用C++时,我们经常会使用到STL,相信很多人都想过,如果vim能实现stl库自动补全就好啦,这篇文章,我们就来实现这一点。
(文中所有操作均在windows下进行,在linux也一样可以实现,笔者就不写了)
1.请确保安装好了ctags,和omnicppcomplete;如果你还没有安装好,请参考这两篇文章:把VIM打造成一个真正的IDE(2) , 把VIM打造成一个真正的IDE(3)
2.下载STL库的头文件和实现。下载路径如下:
http://www.vim.org/scripts/script.php?script_id=2358
OK,现在工具已经准备齐了,接下来就是生成tags啦。
去刚下载的STL目录,用ctags命令生成tags文件,命令如下:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
(如果你看了我之前的文章,那么直接用F12生成就行)
有了tags之后,你可以把这个tags换个名字,比如叫stl_tags,然后放到C盘,通过命令
set tags+= c:\stl_tags
就可以将这个tags文件加入到vim的tags搜索表中。
好啦,那么我们现在来测试一下:
新建一个cpp文件,代码如下:
/*==================================================
# Author: DanteZhu - http://www.vimer.cn
# Email: dantezhu@vip.qq.com
# FileName: test.cpp
# Version: 1.0
# LastChange: 2010-01-19 13:45:38
# Description:
# History:
====================================================*/
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main(int argc,char* argv[])
{
vector<int> vec;
vec.
return 0;
}
自动提示的截图如下:
版权所有,转载请注明出处.http://www.vimer.cn
原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]
本文链接地址: http://www.vimer.cn/?p=803

windows平台,VC自带的STL库,用ctags命令生成的tag有些文件不生成tag,比如algorithm这种没有扩展名的。有解决方法吗????
[回复]
依云 回复:
一月 21st, 2010 at 6:18 下午
@ 肖百庆 看看 ctags 的 man 文档就知道了,可以用 -h 选项:Specifies a list of
file extensions, separated by periods, which are to be interpreted as include
(or header) files. To indicate files having no extension, use a period not
followed by a non-period character (e.g. “.”, “..x”, “.x.”).
也可以用 -L file 选项指定列表文件(可以用 find 生成)。
[回复]
Dante 回复:
一月 21st, 2010 at 10:20 下午
哈哈,依云正解~~ ctags是可以指定文件名类型滴~
[回复]
肖百庆 回复:
一月 22nd, 2010 at 11:18 上午
行了,谢谢,我用了这个参数,–language-force=c++生成一样的效果,因为库下面没有任何其它杂七杂八的文件,索性所有文件就当成C++文件
[回复]
为什么我的补全只能是前半部分,比如:
assign( f + std::vector
at( f + std::vector
begin( f + std::vector
capacity( f + std::vector
clear( f + std::vector
[回复]
Dante 回复:
四月 12th, 2010 at 5:04 下午
tags生成的不对,或者omni的配置不对?
我的是这样的呀:
assign(_InputIterator __first, _InputIterator __last) f + std::vector
写一下你omni的配置吧
[回复]
我在使用时发现以下情况补全有问题:
vector v; //A是一个类
在输入v[i]. 之后弹出的提示都是vector的成员而不是类A的,请问有什么办法吗?谢谢!
[回复]
weii 回复:
四月 28th, 2010 at 8:41 下午
我在使用时发现以下情况补全有问题:
vector v; //A是一个类
在输入v[i]. 之后弹出的提示都是vector的成员而不是类A的,请问有什么办法吗?谢谢!
[回复]
weii 回复:
四月 28th, 2010 at 8:43 下午
刚刚的被当成超链接了,哈哈
vector v; //X是一个类
在输入v[i]. 之后弹出的提示都是vector的成员而不是类A的,请问有什么办法吗?谢谢!
[回复]
weii 回复:
四月 28th, 2010 at 8:44 下午
晕
vector v; //X是一个类
在输入v[i]. 之后弹出的提示都是vector的成员而不是类A的,请问有什么办法吗?谢谢!
[回复]
weii 回复:
四月 28th, 2010 at 8:46 下午
vector〈A〉v; //A是一个类
[回复]
Dante 回复:
四月 28th, 2010 at 10:18 下午
呃,wordpress会自己转移的确比较痛苦……
我刚刚试了一下,确实会出现你说的问题,之前居然都没发现过……
这个问题我也没有啥办法……我替你留意一下吧,有什么解决方案通知你~
[回复]
weii 回复:
四月 28th, 2010 at 10:22 下午
回复得这么快,谢谢!
[回复]
你的下拉列表的颜色是怎么调的,我的颜色很晃眼。
[回复]
Dante 回复:
十月 14th, 2010 at 10:27 下午
安装一下wombat配色吧,不错的~
[回复]
Kola 回复:
十月 14th, 2010 at 10:56 下午
谢谢,我试试!
[回复]
我的不行啊。
按照lz给的链接进行。无法补全。
我google了下发现是bug,解决方法不算复杂。
不知道lz怎么没有出现这个问题呢。。。。???
[回复]
Dante 回复:
十月 17th, 2010 at 10:53 下午
咦,不会吧?我都是一直这样用,没有问题才写出来的哦
[回复]
zhanglistar 回复:
十月 18th, 2010 at 9:46 上午
恩。我在本本上的f12上使用不可以。不过在实验室的ubuntu上用的就没问题,晚上我回去把tags拷过去,再试试。^_^
[回复]
弱弱的问下,在windows下面在哪儿输入命令来进行设置stl_tags命令?直接在cmd下面说找不到tags,放到.vimrc里面好像也不起作用。前面两个插件已经搞好了。
[回复]
Dante 回复:
十二月 3rd, 2010 at 10:08 下午
在vim的命令模式执行
:set tags+=xxx
[回复]
请问博主
vector v;
我输入v. 不会弹出,而且要输入v.再输入ctrl+p呢,而且不仅仅是vector中的还有很多别的。
[回复]
yjjlyyj 回复:
六月 11th, 2011 at 12:14 下午
解决了,又是看了博主对别人的回复解决的。忘了加filetype plugin on 嘿嘿 ~`~
[回复]
你好,我的ctags和omnicppcomplete已经配置好可以使用了,同时我也F12做好了STLtags文件,并放在D:\Vim\vimfiles。可是我在配置文件或命令行模式下加入set tags+=D:\Vim\vimfiles\STLtags却无效,请教一下这是为什么?
[回复]
Dante 回复:
七月 2nd, 2011 at 8:31 下午
呃,无效是说提示无效还是补全不了?
[回复]
李立强 回复:
七月 2nd, 2011 at 10:47 下午
– 全能不全(^O^N^P) 找不到模式
这是最底下的提示
[回复]
fanhe 回复:
七月 3rd, 2011 at 12:57 下午
ctags 很搓的, 作为一个parser的话. 有兴趣可以试试我写的这个项目, 修改了 ctags, 重写了 OmniCpp, 支持模板, 支持 STL, http://www.vim.org/scripts/script.php?script_id=3647 . 我重写的 OmniCpp 可以作为独立组件的, 不过我暂时没分离出来.
[回复]
fanhe 回复:
七月 3rd, 2011 at 3:34 下午
忘了说, 现在只有 linux 平台可以用
[回复]
李立强 回复:
七月 3rd, 2011 at 5:29 下午
当我下下来看了看之后,发现这一点了。。。我还是学生,目前还没用Linux
[回复]
fanhe 回复:
七月 3rd, 2011 at 6:30 下午
如果是计算机专业的学生就应该学学linux, 对就业和学习都有帮助, 研究研究开源的代码之类的.
[回复]
李立强 回复:
七月 3rd, 2011 at 7:17 下午
我也一直想学…但是要下下个学期大三下才学…放假前才在图书馆和网上找了点资料…准备放假看看
[回复]
请问生成的tags有个相对目录的问题怎么解决?例如我的visual studio装在了D:\Promgram files\下,生成的tags中某个tag在.\include\afxext.h中,我把生成的tags考到 c:\下,这时查找该tag的时候会提示找不到C:\include\afxext.h,在这里当然不可能找到该文件,文件在D:\下,请问怎么解决这个问题?能不能生成绝对路径的tags?
[回复]
Dante 回复:
七月 15th, 2011 at 11:55 上午
貌似确实只能生成相对路径,不过也是很多方法解决。比如在tags路径不动,vim中用
set tags=/xxx/tags
[回复]
kuun 回复:
七月 15th, 2011 at 1:34 下午
这个我也是这样想的,不过我把生成的tags放在原始目录下,在vimrc中设置set tags+=D:\Program files\Microsoft Visual Studio 8\VC\atlmfc\tags,但目录中不能有空格,我又在所有有空格的地方加了”\”进行转意,可是vim还是读不到这个tags.不知道我这样写对不对.?
[回复]
Dante 回复:
七月 15th, 2011 at 4:13 下午
应该没问题吧,不过我在windows下都尽量避免目录有空格和中文。免得出诡异的错误。。
[回复]
madper 回复:
四月 1st, 2012 at 8:46 下午
我怎么觉得, \本身需要转义, 就是\\. 别的地方都需要, 不知道vim需要不~ 可以试试看~
[回复]
为什么Stl库支持不完整,,,比如,输入vector::时,omnicppcomplete无法实现补全iterator等域成员,本人菜鸟一个,望博主指点,,,不胜感激,,,,
[回复]
Dante 回复:
八月 11th, 2011 at 12:18 上午
这和ctags的实现有关系的,有些确实补全不了。
[回复]
谢谢博主的答复,,,,
从这里学到不少东西,,,
[回复]
[...] 比如对STL的支持,可以参见:让Vim(gvim)支持C++STL库的自动补全。 [...]
可以不按ctrl+N补全吗,比如我写出了vec,就会自动显示vector
[回复]
Dante 回复:
十月 30th, 2011 at 12:29 上午
可以的,好像叫 NeoComplete
不过可能有时会卡
[回复]
您好,博主。请问一下能够在使用一个库的tags的同时还使用当前工程下的tags吗?具体怎么做呢?我的做法是set tags+=$path 这里的path是我那个库的tags。然后再在当前目录下生成tags。但是我这样做却不行,这是为什么呢?
[回复]
[...] 让Vim(gvim)支持C++STL库的自动补全 [...]