Vim Clang Complete 看不到 OpenGL 的某些功能



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

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

谁有解决这个问题的办法?这很烦人,因为我经常使用这些功能,而且需要自动补全。

谢谢。

编辑:同样我的include头文件是这样的:

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

顺便说一下,我在Arch Linux x64上。

好了,我找到答案了。因为clang_complete不能完成由GLEW创建的参数(因为函数定义为#define FOO somefunction,而不是定义为:#define FOO(arg1, arg2, arg3) somefunction (arg1, arg2, arg3))

要解决这个问题,您必须将此选项添加到~/。vimrc文件。

let g:clang_complete_macros = 1

现在,您将获得函数补全,但仍然没有参数补全。因此,您必须用

替换GLEW(很遗憾)。
#define GL_GLEXT_PROTOTYPES
#include <GL/gl.h>
#include <GL/glext.h>

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

就zero57的答案展开。

您可以添加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现在应该完成你的参数,编译时你将使用glow。这对我的工作与YouCompleteMe (YCM)插件,所以我认为它与clang_complete。

最新更新