2016-09-12 5 views
0

В настоящее время я нахожусь в середине переключения моей IDE на C++ с XCode на Vim. Я читал о плагине Vim «YCM» и требует наличия .ycm_extra_conf.py в исходном каталоге. Я использую генератор YCM для генерации .ycm_extra_conf.py и Ctags для генерации тегов. Мои вопросы - это то, что использует теги? Используется ли YCM для Ctags (который собирает все определения и важную информацию о коде)? Использует ли YCM теги, сгенерированные CTags? Существует ли для генерации .ycm_extra_conf.py наличие тегов?Какова связь между .ycm_extra_conf.py и Exuberant Ctags

ответ

1

если ваш .ycm_extra_conf.py установлен правильно, вам не нужны ctags.

, если вы let g:ycm_collect_identifiers_from_tags_files = 1 и сгенерируете ctags с опцией --fields=+l, тогда YCM распознает ctags и заполняет все теги в качестве идентификатора, это неточно как семантическое завершение. и большой файл ctags использует много памяти. Поэтому ctags не рекомендуется.

Edit:

YCM использование лязг в качестве смыслового бэкэндом. и .ycm_extra_conf.py устанавливает необходимые флаги. Вы можете создать базу данных компиляции, но когда вы добавляете новый файл, вам нужно воссоздать базу данных компиляции.

Уведомление .ycm_extra_conf.py является файлом python, поэтому вы также можете генерировать флаги динамически. В моем развитии большинство флагов одинаковы, но флаги include меняются. поэтому я использую глобальный .ycm_extra_conf.py для генерации флагов для включения всего файла .h в свой проект. таким образом, обычно мне не нужно создавать .ycm_extra_conf.py, и все функции завершения и goto работают.

Вы можете загрузить мой глобальный .ycm_extra_conf.py и изменить некоторые фиксированные флаги в свою пользу и поместить их в свой корень проекта или установить его как глобально, после чего вы должны работать.

+0

Итак, вы предлагаете мне пропустить процесс создания тегов? Не могли бы вы сказать, с чем справляется помощь .ycm_extra_conf.py? –

2

Я бы сказал, что YCM не требует базы данных тэгов. Если вы скомпилировали его, чтобы полагаться на парсон-парсер, ну, вы получите очень умное завершение. Без этого благодаря тэгам вы получите то, что лучше, чем ничего.

В противном случае большинство других плагинов полагаются на базу данных тегов для выполнения различных задач. Например, tagbar отобразит структурированный контур тегов в вашей системе. В lh-cpp и vim-refactor я построить базу тегов в последний момент для того, чтобы вывести родителей, детей, членов, прыгать/генерировать определения функций и т.д.

Вы должны знать, что мы не можем достичь того, как смарт-тегами, как то, что мы сможем достичь с помощью плагинов, основанных на clang. Создание тегов на самом деле намного быстрее (но YCM работает в фоновом режиме, а также теги, генерирующие плагины, такие как easytags (IIRC), Gutentag и lh-tags v2 (которые я поддерживаю)). К сожалению, они пропускают информацию. В частности, когда мы используем не очень активные exhuberant ctags - я настоятельно рекомендую universal ctags вместо синтаксического анализа кода C++, он даже поймет конструкции C++ 11.

+0

Спасибо, что ответили так, если ycm может работать отлично, не генерируя ctags для peoject, это означает каждый раз, когда я вношу изменения в проект, например, создаю или удаляю класс i, чтобы восстановить файл .ycm_extra_conf.py? –

+0

YCM не заботится о классах, он работает на * единицах перевода *. И каждый файл .ycm_extra_conf.py читается один раз. Поэтому нет, поскольку я читаю документ, вам не нужно его редактировать (https://github.com/Valloric/YouCompleteMe#c-family-semantic-completion).Однако, если вы используете созданную CMake базу данных компиляции json, вам придется запустить 'cmake' с правильными параметрами для регенерации базы данных компиляции при каждом добавлении нового файла. –