2013-03-07 45 views
2

的一些功能我有vim並安裝clang_complete但由於某些原因,當我嘗試自動完成它沒有看到一些OpenGL的功能,如glBindBuffer,或glEnableVertexAttribArray。我按CTRL +XCTRL +ü強制自動完成的,它顯示了函數名和參數,但它只是缺少一些功能。VIM鐺完全沒有發現OpenGL

即使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

你的'.clang_complete'文件是什麼樣子的,你的gl頭文件位於哪裏? – 2013-03-07 00:33:06

+0

我沒有.clang_complete文件,我的gl頭文件位於/ usr/include/GL。我也試過包括#include ,但是當我嘗試自動完成時,仍然沒有顯示glBindBuffer。 – zero57 2013-03-07 00:46:52

回答

1

好的我找到了答案。因爲clang_complete不能完成由GLEW創建的參數(因爲函數被定義爲#define FOO somefunction,並且沒有被定義爲:#define FOO(arg1,arg2,arg3)someFunction(arg1,arg2,arg3))

要解決這個問題,您必須將此選項添加到〜/ .vimrc文件中。

let g:clang_complete_macros = 1 

現在,您將獲得函數完成,但仍然沒有參數完成。所以,你必須與

#define GL_GLEXT_PROTOTYPES 
#include <GL/gl.h> 
#include <GL/glext.h> 

該更換GLEW(黯然)將最終完成的論據,雖然,如果有在做解決這個問題的選擇,我想聽聽。

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。