【问题标题】:vim clang complete doesn't see some functions of openglvim clang complete 看不到 opengl 的一些功能
【发布时间】:2013-09-18 12:37:30
【问题描述】:

我安装了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

【问题讨论】:

  • 你的 .clang_complete 文件是什么样的,你的 gl 头文件在哪里?
  • 我没有 .clang_complete 文件,我的 gl 头文件位于 /usr/include/GL。我也尝试包含 #include 但是当我尝试自动完成时仍然没有显示 glBindBuffer。

标签: c++ vim autocomplete clang


【解决方案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>

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

【讨论】:

    【解决方案2】:

    扩展 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。

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多