Почему YouCompleteMe не работает после точки?

Я установил Ты дополняешь меня согласно руководству по установке. я использую 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']

0

Решение

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 Флаг решил проблему.

0

Другие решения

Это не относится к YCM, просто отвечает на простой ванильный подход.

Что я обычно делаю, на Linux, это расширить path включить заголовки библиотеки std, такие как:

set path+=/usr/include/**

тогда мы можем использовать Ctrlп или же CtrlN.

0