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