2

我已经安装了vimclang_complete但由于某种原因,当我尝试自动完成时,它看不到 OpenGL 的某些功能,例如glBindBufferglEnableVertexAttribArray. 我按CTRL+XCTRL+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

4

2 回答 2

1

好吧,我找到了答案。由于 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>

这将最终完成争论,但是,如果有其他方法可以解决这个问题,我想听听。

于 2013-03-13T22:56:35.510 回答
1

扩展 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 现在应该完成您的参数,并且在编译时您将使用 glew。这适用于 YouCompleteMe (YCM) 插件,所以我认为它适用于 clang_complete。

于 2013-09-18T04:37:30.250 回答