vim clang完成没有看到opengl的一些功能

时间:2013-03-07 00:27:51

标签: c++ vim autocomplete clang

我安装了vimclang_complete但由于某种原因,当我尝试自动完成时,它没有看到一些OpenGL的功能,例如glBindBufferglEnableVertexAttribArray。我按 CTRL + X CTRL + U 强制自动完成并显示函数名称和参数,但它只是缺少一些功能。

即使使用glfw,我也会尝试自动填写GLFW_KEY_ESC,但它不在那里,我不知道为什么,它只是说User defined completion (^U^N^P) Pattern not found

有没有人能解决这个问题?这非常烦人,因为我经常使用这些功能,需要自动完成。

感谢。

编辑:我的包含头文件也是:

#include <iostream>
#include <string>
#include <GL/glew.h>
#include <GL/glfw.h>
#include <glm/glm.hpp>

顺便说一下,我Arch Linux x64

2 个答案:

答案 0 :(得分:1)

好吧,我找到了答案。因为clang_complete无法完成GLEW创建的参数(因为函数定义为#define FOO somefunction,而不是定义为:#define FOO(arg1,arg2,arg3)someFunction(arg1,arg2,arg3))< / p>

要解决此问题,您必须将此选项添加到〜/ .vimrc文件中。

let g:clang_complete_macros = 1

现在,您将获得功能完成,但仍然没有参数完成。所以,你必须用

取代GLEW(遗憾地)
#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glext.h>

这将最终完成论证,但是,如果有解决这个问题的替代方案,我想听听。

答案 1 :(得分:1)

扩展零57的答案。

您可以添加clang_complete特定的编译标志来定义clang_complete的宏

let g:clang_user_options = ' -DCLANG_COMPLETE_ONLY'

然后在您的代码中,您可以使用

#ifdef CLANG_COMPLETE_ONLY
    #define GL_GLEXT_PROTOTYPES
    #include <GL/gl.h>
    #include <GL/glext.h>
#else
    #include <GL/glew.h>
#endif

这不是一个完美的解决方案,但是clang_complete现在应该完成你的参数,在编译时你将使用glew。这适用于YouCompleteMe(YCM)插件,所以我认为它适用于clang_complete。