Я установил Ты дополняешь меня согласно руководству по установке. я использую GVim на Windows машина. Базовое символьное завершение работает, но я не могу сделать автозаполнение из моих заголовков.
Если у меня есть:
#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
Команда выдает список ошибок из заголовочных файлов. Как Ты дополняешь меня использования лязг чтобы постоянно компилировать исходники, я пытался скомпилировать свой файл с помощью clang. Я также знаю, что я должен указать параметры командной строки для Clang во флаги в .ycm_extra_conf.py. Я не знаю, работает ли YCM clang.exe или же лязг-cl.exe но я на самом деле успешно скомпилировал мой .cpp файл, используя лязг-cl.exe вручную после запуска 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']
micbou дал мне ответ на этот вопрос.
В Windows Clang использует
i686-pc-windows-gnu
на 32-битной иx86_64-w64-windows-gnu
на 64-битной в качестве цели по умолчанию. Вам нужно изменить его на MSVC, добавив следующий флаг:
flags = [ '--target=<arch>-pc-windows-msvc<xx.yy.zzzzz>' ]
гдеi686
на 32-битной,x86_64
на 64-битной и<xx.yy.zzzzz>
это версия MSVC. Вы можете найти его, запустив компилятор VC ++cl.exe
, В вашем случае, так как вы используете MSVC 14 на 32-битной, цель должна бытьi686-pc-windows-msvc19.00.23506
,С уже добавленными флагами включения вы должны получить дополнения из заголовков.
В моем конкретном случае --target=x86_64-pc-windows-msvc19.00.23026
Флаг решил проблему.
Это не относится к YCM, просто отвечает на простой ванильный подход.
Что я обычно делаю, на Linux, это расширить path
включить заголовки библиотеки std, такие как:
set path+=/usr/include/**
тогда мы можем использовать Ctrl—п или же Ctrl—N.