За исключением плагинов vim, для которых у меня есть только один файл тегов, у меня также есть одна база данных ctags на проект.
Это подразумевает две вещи:
- способ обнаружить "проекты" и соответственно установить настройку vim. Есть множество плагинов , способных сделать это.
- способ иметь разные настройки для разных проектов одновременно. Вот где
setlocal tags=...
(/ setlocal tags+=
) играет свою роль.
В большинстве случаев проекты не делятся тегами. Как следствие, я счастлив, обнаружив текущий проект, чтобы автоматически определить, где я обновляю теги и где я их читаю. Это два разных варианта использования, и vim только обрабатывает (изначально) последний. Плагины, которые обрабатывают первый вариант использования, должны указать переменную (локальную буферную) для хранения информации.
На самом деле, при сохранении файла необходимо обновить только одну конкретную базу тегов, возможно, нам придется выбирать теги для нескольких баз одновременно. Это тот случай, когда я работаю над библиотеками / проектами, которые зависят друг от друга: мне часто нужно что-то проверять в (~ стороннем) коде, который я импортирую. Я мог бы использовать глобальные опции &tags
, но я решил (пока) иметь разные значения в разных буферах. Еще раз, об этом сценарии использования заботятся благодаря плагину local-vimrc, который я использую.
Что касается обновления базы данных тегов, это делается в плагине (который я поддерживаю, но существуют другие с аналогичными возможностями): я удаляю теги, связанные с текущим файлом, из связанных тегов проекта базы данных, затем я обновляю с опцией -a
, в фоновом режиме. Нет необходимости анализировать весь проект каждый раз, когда мы сохраняем файл.
В случае, если файлы проекта обновляются вне области действия vim, у меня все еще есть возможность запускать теги для всего проекта. Хотя все прозрачно с помощью ловушек фиксации, я могу обновить словарь проверки орфографии vim, чтобы не отмечать идентификаторы кода как слова с ошибками. Я подозреваю, что было бы немного более утомительно с чистым подходом фиксации хука.