C语言自动完成插件Vim(C/C++完成)使用Clang(clang_complete,YouCompleteMe)

前端之家收集整理的这篇文章主要介绍了C语言自动完成插件Vim(C/C++完成)使用Clang(clang_complete,YouCompleteMe)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在windows上使用64位Vim,HarooganHaroogan
+Python27
+python33
+huge

我试图使用clang_complete,所以我采取libclang.dll库here,我正确设置我的vimrc.找到libclang.dll.

但是当我打开* .cpp文件时,我现在有一个消息:

libclang cannot find the builtin includes this will cause slow
completion code

但我完全没有完成…

我发现this post与构建我使用的Vim的版本的人,但是没有明确的指导,该怎么做.有人可以帮忙吗

UPDATE

这是我做的:

> Took Vim YouCompleteMe for Windows
> Took LLVM for Windows
>从它收到liclang.dll并将其粘贴到YCM python目录中
> Took .ycm_extra_conf.py并把它粘在我的cpp文件

它几乎工作(我没有任何错误消息),但我仍然得到:

clang_complete

感谢使用Vim for Windows,希望你喜欢.

解决你的问题,你必须使用.clang_complete文件.阅读更多关于它:h clang_complete.简而言之,您可以将该文件放入任何项目的根目录(即每个项目的这个文件可以是不同的,完全有道理,因为不同的项目有不同的工具链配置).以下是MinGW-w64工具链的示例:

-ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++
-ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32
-ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward
-ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include
-ID:/Toolchains/x64/MinGW-w64/4.8.1/lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed
-ID:/Toolchains/x64/MinGW-w64/4.8.1/x86_64-w64-mingw32/include

-ID:/Libraries/x64/MinGW-w64/4.8.1/Boost/1.54.0/include

-ID:/Libraries/x64/MinGW-w64/4.8.1/Qt/4.8.5/include

-ID:/Libraries/x64/MinGW-w64/4.8.1/Eigen/3.1.3/include

"-ID:/Libraries/x64/MinGW-w64/4.8.1/Example with Spaces/0.0.1/include"

-std=c++11

-DUNICODE

当您使用Vim编辑项目中的某些文件时,clang_complete将向后遍历编辑文件的所有父目录,直到第一个.clang_complete文件绊倒才能读取.然后它读取所有这些标志/开关/定义,并在调用libclang时使用它们来完成.

YouCompleteMe

这些天,我不再使用clang_complete了.有更强大的语义自动完成插件Vim我们那里.这是YouCompleteMe.我强烈建议你尝试一下.对于C语言(C/C++ / Objective-C / Objective-C)的语义完成,它也使用libclang.它依赖于强大的C后端,因此非常快.它与syntastic(另一个必须有Vim插件)有很大的一体化.它有能力跳转到定义,等等.

由于它是用C编写的并且通过Python粘贴到Vim,所以你必须编译C后端.为了缓解疼痛,您可以从我的Vim YouCompleteMe for Windows下载预建并准备使用YCM插件.我已经为x86和x64架构构建了它.本机组件称为ycm_core.pyd.像往常一样,您选择的Vim构建架构必须与YCM构建(即ycm_core.pyd)相匹配. YCM只能使用Python 2(不是3),所以只需确保在PATH环境变量中有Python 2 DLL(例如python27.dll)和Python 2 Interpreter(python.exe).

如果您需要LLVM / Clang,您也可以从我下载它:LLVM for Windows.同样,请确保您在PATH环境变量(推荐)中有libclang.dll或者在ycm_core.pyd旁边.支持x86和x64架构,再次,架构应该与Vim和YCM的架构相匹配.

关于完成:

Should he magically find where is the STL?

当然不是!这只是一个基于Clang前端的自动完成系统.它应该如何知道您正在使用哪个工具链来编译代码?您可以使用任何东西:Visual C,Borland C,GCC,MinGW,MinGW-w64,LLVM / Clang等.每个都有自己的标准库和运行时提供.因此,在每种情况下,您都必须指定当前工具链用于查找标准包含的所有路径.

例如,在GCC,MinGW-w64的情况下,您可以在POSIX shell中运行以下操作:

g++ -E -x c++ - -v < /dev/null

或在Windows命令提示符下:

g++ -E -x c++ - -v < nul

并寻找以下摘录:

#include <...> search starts here:
 d:\toolchains\x64\mingw-w64\4.8.1\posix\seh\bin\../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++
 d:\toolchains\x64\mingw-w64\4.8.1\posix\seh\bin\../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32
 d:\toolchains\x64\mingw-w64\4.8.1\posix\seh\bin\../lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward
 d:\toolchains\x64\mingw-w64\4.8.1\posix\seh\bin\../lib/gcc/x86_64-w64-mingw32/4.8.1/include
 d:\toolchains\x64\mingw-w64\4.8.1\posix\seh\bin\../lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed
 d:\toolchains\x64\mingw-w64\4.8.1\posix\seh\bin\../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/include
End of search list.

这告诉你,标准的所有路径包括在编译代码期间GCC,MinGW-w64都隐式使用.

对于LLVM / Clang,您可以这样做:

clang++ -E -x c++ - -v < /dev/null

要么:

clang++ -E -x c++ - -v < nul

当您知道路径时,您可以将它们快乐地添加到.ycm_extra_conf.py中.例如,在我的情况下:

'-I','D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++','-I','D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/x86_64-w64-mingw32','D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward','D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include','D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed','D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/x86_64-w64-mingw32/include',

猜你在找的Bash相关文章