0

我已经按照安装指南安装了YouCompleteMe 。我在Windows机器上使用gVim 。基本的符号完成正在工作,但我无法从我的标题中自动完成。

如果我有:

#include <vector>
using namespace std;
vector<int> myVector;

那么它将找不到完成myVector.<smth like push_back etc...>

Vim 状态栏说:

--User defined completion (^U^N^P) Pattern not found

或者

--Omni completion (^O^N^P) Pattern not found

诊断

我开始诊断问题。:YcmDiags命令给出来自头文件的错误列表。由于YouCompleteMe使用clang不断编译源代码,因此我尝试使用 clang 编译我的文件。我也知道我应该在.ycm_extra_conf.py的标志中为 clang 指定命令行选项。我不知道 YCM 是运行clang.exe还是clang-cl.exe,但实际上我在从命令行运行vsvars32.bat后手动使用clang-cl.exe成功编译了我的 .cpp 文件。我没有成功使用clang.exe编译。

这是我的.ycm_extra_conf.py文件标志部分:

flags = [ 
'-std=c++11',
'-x', 'c++',
'-I', 'C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/include',
'-I', 'C:/Program Files (x86)/Windows Kits/10/Include/10.0.10150.0/ucrt',
'-I', 'C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/atlmfc/include',
'-I', 'C:/Program Files (x86)/Windows Kits/NETFXSDK/4.6/include/um',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/um',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/shared',
'-I', 'C:/Program Files (x86)/Windows Kits/8.1/Include/winrt',
'/link', '/LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\lib" /LIBPATH:"C:\Program Files (x86)\Windows Kits\10\lib\10.0.10150.0\ucrt\x86" /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86"',
'/EHsc']
4

2 回答 2

0

micbou给了我这个问题的答案

在 Windows 上,Clang 使用i686-pc-windows-gnu32 位和x86_64-w64-windows-gnu64 位作为其默认目标。您需要通过添加以下标志将其更改为 MSVC:

flags = [ '--target=<arch>-pc-windows-msvc<xx.yy.zzzzz>' ] where 是i68632 位,x86_6464 位,<xx.yy.zzzzz>是 MSVC 的版本。您可以通过运行 VC++ 编译器找到它cl.exe。在您的情况下,由于您在 32 位上使用 MSVC 14,因此目标应该是i686-pc-windows-msvc19.00.23506.

使用您已经添加的包含标志,您应该从标题中获得完成。

在我的特殊情况下--target=x86_64-pc-windows-msvc19.00.23026,标志解决了这个问题。

于 2016-01-23T22:46:53.047 回答
0

这与 YCM 无关,只是回答普通的方法。

我通常在 linux 上做的是扩展path包括标准库头文件,如:

set path+=/usr/include/**

然后,我们可以使用Ctrl-pCtrl- n

于 2016-01-24T13:23:09.883 回答