17

我在 Windows 上使用 64 位 Vim,Haroogan 的这个版本

+python27
+python33
+huge

我正在尝试使用clang_complete,所以我在这里libclang.dll使用了库并正确设置了我的库。被发现。vimrclibclang.dll

但是,当我打开*.cpp文件时,我现在收到一条消息:

libclang找不到内置包含这将导致缓慢的完成代码

但我根本没有完成......

我在构建我使用的 Vim 版本的人那里找到了这篇文章,但是没有明确的指示说明该怎么做。有人可以帮忙吗?

更新

这是我所做的:

  1. 使用 Vim YouCompleteMe for Windows
  2. 为 Windows 使用LLVM
  3. 从中取出 liclang.dll 并将其卡在 YCM python 目录中
  4. 拿了.ycm_extra_conf.py并将其与我的 cpp 文件一起使用

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

4

1 回答 1

26

clang_complete


感谢您使用Windows 版 Vim,希望您喜欢。

要解决您的问题,您必须使用.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完成期间使用它们。

你完成我


这些天,我不再使用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)一起工作,因此只需确保环境变量中有 Python 2 DLL(例如python27.dll)和 Python 2 解释器(python.exe) 。PATH

如果你需要 LLVM/Clang,你也可以从我这里下载:LLVM for Windows。同样,只需确保您libclang.dllPATH环境变量中(推荐)ycm_core.pyd. 再次支持 x86 和 x64 架构,并且该架构应该再次匹配 Vim 和 YCM 的架构。

关于完成:

他应该神奇地找到STL在哪里吗?

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

例如,对于 GCC、MinGW、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、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',
'-I',
'D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include/c++/backward',
'-I',
'D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include',
'-I',
'D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/lib/gcc/x86_64-w64-mingw32/4.8.1/include-fixed',
'-I',
'D:/Toolchains/x64/MinGW-w64/4.8.1/POSIX/SEH/x86_64-w64-mingw32/include',
于 2013-09-18T15:27:53.140 回答