В настоящее время я нахожусь в процессе переключения моей IDE на C ++ с XCode на Vim.
Я читал о плагине Vim «YCM», и он требует наличия .ycm_extra_conf.py в исходном каталоге. Я использую YCM Generator для генерации .ycm_extra_conf.py и Ctags для генерации тегов. Мои вопросы, что использует теги? Имеет ли YCM какое-либо применение для Ctags (который собирает все определения и важную информацию о коде)? Использует ли YCM теги, сгенерированные CTags, каким-либо образом? Требуется ли для создания .ycm_extra_conf.py наличие тегов?
Я бы сказал, что YCM не требует базы данных тегов. Если вы скомпилировали его, чтобы полагаться на Clang Parser, вы получите очень умное завершение. Без этого, благодаря тегам, вы получите что-то лучше, чем ничего.
В противном случае большинство других плагинов полагаются на базу данных тегов для выполнения различных задач. Например tagbar будет отображать структурированный контур тегов в вашей системе. В LH-CPP а также ВИМ-рефакторинг Я создаю базу тегов в последний момент, чтобы определить родителей, детей, членов, определения функций перехода / генерации и т. Д.
Вы должны знать, что мы не можем добиться таких умных вещей с помощью тегов, как мы можем достичь с помощью плагинов на основе Clang. Генерация тегов на самом деле намного быстрее (но YCM работает в фоновом режиме, а также генерирует теги плагины, такие как easytags (IIRC), Gutentag и LH-теги v2 (что я утверждаю)). К сожалению, они могут пропустить майскую информацию. В частности, когда мы используем не очень активные exhuberant ctags — я очень рекомендую универсальные ctags вместо этого, чтобы проанализировать код C ++, он даже поймет конструкции C ++ 11.
если твой .ycm_extra_conf.py
установить правильно, вам не нужны ctags.
если ты let g:ycm_collect_identifiers_from_tags_files = 1
и создать ctags с опцией --fields=+l
затем YCM распознал ctags и завершил все теги как идентификаторы, это не является точным семантическим завершением. и большой файл ctags использует много памяти. Так что ctags не рекомендуется.
Редактировать:
YCM использует clang в качестве семантического бэкэнда. и .ycm_extra_conf.py
устанавливает флажки, необходимые для лязга. Вы можете сгенерировать базу данных компиляции, но когда вы добавляете новый файл, вам необходимо заново создать базу данных компиляции.
уведомление .ycm_extra_conf.py
это файл Python, поэтому вы также можете генерировать флаги динамически. В моей разработке большинство флагов одинаковые, но флаги включения меняются. поэтому я использую глобальный .ycm_extra_conf.py
генерировать флаги для включения всех .h
файл в моем проекте. таким образом, обычно мне не нужно создавать .ycm_extra_conf.py
и все функции завершения и перехода работают.
Вы можете скачать мой глобальный .ycm_extra_conf.py, и измените некоторые фиксированные флаги в свою пользу, и поместите их в корневой каталог вашего проекта или установите глобально, тогда ваше завершение должно работать.