Каковы самые простые / лучшие методы для управления вашими файлами тегов ctags? - PullRequest
9 голосов
/ 10 августа 2009

Я только начал использовать ctags и очень ценю этот инструмент, но способ управления моим файлом тегов, на мой взгляд, несколько обременителен и очень негибкий.

Как я в настоящее время управляю своим файлом тега:

  1. У меня есть один монолитный тег файл, хранящийся в моей домашней папке на ~/.vim/tags
  2. Когда я обновляю свой код или изменяю проекты, я запускаю сценарий, который удаляет старый файл тега и восстанавливает файл монолитного тега (вы должны изменить место, откуда выполняется ctags, когда вы меняете проекты)

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

Будет ли отдельный монолитный файл тегов не работать для большой / большой кодовой базы? Почему огромный теговый файл не работает на большой / огромной базе кода?

Каковы другие способы управления файлом тегов (или файлами тегов во множественном числе)?

И почему ваш новый метод управления файлами тегов будет лучше? (Предположительно, лучшее решение иногда будет более сложным. Поэтому, если ваше решение более сложное, я спрашиваю вас, в чем заключается дополнительное преимущество для более сложного метода управления файлами тегов.)


p.s. Я нашел вопрос о стеке потока, говорящий о ctags под названием " vimctags-tips-and-tricks ", но этот вопрос не говорит о том, как управлять файлами тегов.

Ответы [ 4 ]

10 голосов
/ 11 августа 2009

Один из подходов, который мне недавно понравился, - это использование хуков VCS (системы контроля версий) для генерации файлов ctags. Я использую git локально даже для небольших проектов и тому подобного, и поэтому ctags обновляется каждый раз, когда я фиксирую (это, очевидно, возможно со всеми остальными VCS).

Лично мне нравится размещать файл ctags в каталоге каждого проекта, но этот подход должен работать точно так же в глобальном масштабе.

РЕДАКТИРОВАТЬ : перехватчики VCS - это скрипты или программы, которые запускаются автоматически при выполнении определенных действий, таких как извлечение, принятие, возврат и другие.
Для дальнейшего чтения предлагаю следующие ссылки:

Крючки обычно доступны во всех VCS, с которыми я столкнулся, и я уверен, что вы сможете найти документацию для того, который вы выбрали.

7 голосов
/ 10 августа 2009

Я положил свой tags файл в каталог проекта. Это сохраняет теги отдельно для каждого проекта.

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

1 голос
/ 11 августа 2009

Как и Грег, я храню файл тегов в каталоге проекта. Затем я использую плагин project с его тегом in=, чтобы установить местоположение файла тега и использовать ли рекурсию при регенерации tags и cscope.out для различных проектов.

Я обычно обновляю файл тегов только тогда, когда произошли значительные изменения, так как тег обычно приводит вас к правильной строке (или, по крайней мере, почти к правой строке), даже если он устарел. Основная причина, по которой я обновляюсь, заключается в том, что я добавил новое перечисление, структуру или подобное и хочу обновить синтаксис тега .

0 голосов
/ 14 августа 2017

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

Это подразумевает две вещи:

  1. способ обнаружить "проекты" и соответственно установить настройку vim. Есть множество плагинов , способных сделать это.
  2. способ иметь разные настройки для разных проектов одновременно. Вот где setlocal tags=... (/ setlocal tags+=) играет свою роль.

В большинстве случаев проекты не делятся тегами. Как следствие, я счастлив, обнаружив текущий проект, чтобы автоматически определить, где я обновляю теги и где я их читаю. Это два разных варианта использования, и vim только обрабатывает (изначально) последний. Плагины, которые обрабатывают первый вариант использования, должны указать переменную (локальную буферную) для хранения информации.

На самом деле, при сохранении файла необходимо обновить только одну конкретную базу тегов, возможно, нам придется выбирать теги для нескольких баз одновременно. Это тот случай, когда я работаю над библиотеками / проектами, которые зависят друг от друга: мне часто нужно что-то проверять в (~ стороннем) коде, который я импортирую. Я мог бы использовать глобальные опции &tags, но я решил (пока) иметь разные значения в разных буферах. Еще раз, об этом сценарии использования заботятся благодаря плагину local-vimrc, который я использую.

Что касается обновления базы данных тегов, это делается в плагине (который я поддерживаю, но существуют другие с аналогичными возможностями): я удаляю теги, связанные с текущим файлом, из связанных тегов проекта базы данных, затем я обновляю с опцией -a, в фоновом режиме. Нет необходимости анализировать весь проект каждый раз, когда мы сохраняем файл.

В случае, если файлы проекта обновляются вне области действия vim, у меня все еще есть возможность запускать теги для всего проекта. Хотя все прозрачно с помощью ловушек фиксации, я могу обновить словарь проверки орфографии vim, чтобы не отмечать идентификаторы кода как слова с ошибками. Я подозреваю, что было бы немного более утомительно с чистым подходом фиксации хука.

...