我安装了vim
和clang_complete
但由于某种原因,当我尝试自动完成时,它没有看到一些OpenGL的功能,例如glBindBuffer
或glEnableVertexAttribArray
。我按 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
。
答案 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。