Как указать, где создавать файл тегов

В настоящее время у меня есть такой каталог проекта

MainProject
|_ProjectA
|   |_src
|      |_file1.cpp
|      |_file2.cpp
|      |_.....
|      |_tags <---tag file generated here  
|_ProjectB
|   |_src
|      |_file3.cpp
|      |_file4.cpp
|      |_.....
       |_tags <---tag file generated here

Теперь file4.cpp использует элементы в file1.cpp, однако кажется, что, поскольку он находится в другой папке, я получаю сообщение

cstag - tag not found

В настоящее время я вошел в свои ProjectA и ProjectB и сделал это для каждого

ctage -R .

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


person James Franco    schedule 23.07.2017    source источник


Ответы (3)


Самым простым решением было бы создать один файл tags:

$ cd MainProject
$ ctags -R .

и скажите Vim рекурсивно двигаться вверх при поиске tags файлов:

set tags=./tags;,tags;
person romainl    schedule 23.07.2017

Я рекомендую использовать плагин vim gutentags для создания файла тегов. Gutentags находит корневой каталог вашего проекта, ища папки SCM (например, .git), и генерирует файл тегов для всего проекта.

Никакой другой конфигурации не требуется, но вы можете указать другой каталог кеша, если хотите (g: gutentags_cache_dir). Загляните в файл справки, чтобы узнать о дополнительных параметрах конфигурации help gutentags.

person apparat    schedule 23.07.2017

Не существует единственного способа удовлетворить вашу потребность. Ответы также могут зависеть от других особенностей или от того, что вы готовы сделать.

Например, если бы все ваши проекты независимо управлялись в VCS (IOW, если у них есть .git/ или .svn/ в их корне), у вас будет доступ к автоматическим решениям. gutentags - один из них - см. ответ @apparat. Также существуют независимые от vim решения, которые прослушивают зафиксированные файлы или измененные файлы - @ romainl вчера только что представил некоторые из них на reddit, и я вполне уверен, что они уже были описаны на SO. Есть также мой плагин lh-tags, который очень похож на gutentags и автоматически устанавливает &tags для каждого буфера, принадлежащего проекту - я не проверял, что делают gutentags по этой теме.

Если ваши проекты не относятся к VCS, вам понадобится другой способ сказать: «это проект foo» и «это панель проекта». В этом SO Q / A рассматривается эта тема. Оттуда вы сможете установить (локально) l:&tags на то, что лучше всего подходит для каждого проекта, и даже настроить, как будут работать плагины vim, которые генерируют теги - я настоящий (?) Мономан в отношении осведомленность о проекте в моих плагинах. NB: в случае lh-tags вам просто нужно указать плагину, где должны быть созданы файлы тегов, он обновит &tags соответственно.

person Luc Hermitte    schedule 23.07.2017