我已根据安装指南安装了 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 ,但实际上我使用 clang-cl成功编译了我的.cpp文件。从命令行运行 vsvars32.bat 后手动执行。我没有使用 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']
答案 0 :(得分:0)
micbou 给了我answer这个问题。
在Windows上,Clang在32位上使用
i686-pc-windows-gnu
,在64位上使用x86_64-w64-windows-gnu
作为其默认目标。您需要通过添加以下标志将其更改为MSVC:
flags = [ '--target=<arch>-pc-windows-msvc<xx.yy.zzzzz>' ]
32位为i686
,64位为x86_64
,<xx.yy.zzzzz>
为MSVC的版本。您可以通过运行VC ++编译器cl.exe
找到它。在您的情况下,由于您在32位上使用MSVC 14,因此目标应为i686-pc-windows-msvc19.00.23506
。使用已添加的包含标记,您应该从标题中获得完成。
在我的特定情况下,--target=x86_64-pc-windows-msvc19.00.23026
标志解决了问题。
答案 1 :(得分:0)
这与YCM无关,只是回答普通的方法。
我通常在linux上做的是扩展path
以包括std库头,如:
set path+=/usr/include/**
然后,我们可以使用 Ctrl - p 或 Ctrl - n 。