首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Clang (clang_complete,YouCompleteMe)实现Vim (C/C++完成)的C族语义自动完成插件

使用Clang (clang_complete,YouCompleteMe)实现Vim (C/C++完成)的C族语义自动完成插件
EN

Stack Overflow用户
提问于 2013-09-14 11:40:39
回答 1查看 15.7K关注 0票数 17

我在windows上使用64位Vim,这个版本 by 原根

代码语言:javascript
运行
复制
+python27
+python33
+huge

我正在尝试使用完成,所以我选择了libclang.dll这里,并正确设置了自己的vimrc。发现了libclang.dll

然而,当我打开一个*.cpp文件时,我现在有一条消息:

libclang找不到内置的内容,这将导致完成代码缓慢。

但我根本没有完成.

我和我使用的Vim版本的构建人员一起找到了这个职位,但是没有明确的说明该做什么。这里有人能帮忙吗?

更新

以下是我所做的:

  1. 采取了Vim YouCompleteMe for Windows
  2. 采取了面向Windows的LLVM
  3. 从其中获取liclang.dll并将其插入YCM python目录中。
  4. 获取conf.py并将其与cpp文件连接

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-18 15:27:53

clang_complete

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

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

代码语言:javascript
运行
复制
-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/Objective++)的语义完成,它也使用了libclang。它依赖于健壮的C++后端,因此速度非常快。它与合成器有很好的集成(另外一个必须为Vim提供插件)。它具有跳到定义的能力,等等。

因为它是用C++编写的,并且通过Python粘贴到Vim上,所以您必须编译C++后端。为了减轻痛苦,您可以从我的Vim YouCompleteMe for Windows下载预构建并准备好使用YCM插件。我为x86和x64架构构建了它。本机组件称为ycm_core.pyd。与往常一样,您选择的Vim构建的体系结构必须与YCM构建(即ycm_core.pyd)相匹配。YCM只能在Python2(而不是3)中使用,所以只需确保在PATH环境变量中有Python2DLL(例如python27.dll)和Python2解释器(python.exe)。

如果您需要LLVM/Clang,也可以从我这里下载它:面向Windows的LLVM。同样,只需确保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中运行以下代码:

代码语言:javascript
运行
复制
g++ -E -x c++ - -v < /dev/null

或在Windows命令提示符中:

代码语言:javascript
运行
复制
g++ -E -x c++ - -v < nul

并查找以下摘录:

代码语言:javascript
运行
复制
#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,您也可以这样做:

代码语言:javascript
运行
复制
clang++ -E -x c++ - -v < /dev/null

或者:

代码语言:javascript
运行
复制
clang++ -E -x c++ - -v < nul

当您知道这些路径时,您可以很高兴地将它们添加到.ycm_extra_conf.py中。例如,在我的例子中:

代码语言:javascript
运行
复制
'-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',
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18801354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档