Во-первых, вы должны понимать, что jsctags и ctags, вероятно, будут никогда быть в синхронизации. Даже если у вас есть только простая функция, обе программы могут выводить несколько разные сведения. Таким образом, рекомендуется использовать один или другой, но не тот и другой.
Во-вторых, AFAIK, TagBar не нужно настраивать для использования jsctags вместо ctags. Если вы делаете JavaScript, он просто по умолчанию будет использовать jsctags, если он доступен. TagBar не должен жаловаться, если у вас есть рабочие jsctags.
В-третьих, для своих собственных тегов функций, связанных с (:tag
, :tselect
, <C-]>
и т.д.), Вим зависит только от наличия одного или нескольких физических tags
файлов. Независимо от того, генерируются ли эти файлы ctags, jsctags или whatevertags, это не проблема, если они созданы правильно.
И теперь мы приходим к четвертой точке, в которой находится боль: ни тагбар, ни ее старший кузнец TagList фактически не используют физический файл tags
. Они непосредственно касаются ctags или jsctags, даже не пытаясь использовать или обновлять существующий файл tags
. Из-за этого и тот факт, что TagBar работает только с текущим буфером, ваш собственный физический файл tags
(и, следовательно, функциональные возможности тега Vim) и TagBar почти гарантированно не синхронизированы. Даже если вы используете один и тот же индекс.
Так что ... Я бы посоветовал вам использовать либо Ctags или jsctags и забыть что-нибудь о синхронизации тегов, связанных с TagBar-х и Vim, вещи, как обе вещи совершенно отдельны:
Использование TagBar для понимать/перемещаться в текущем буфере.
Используйте функциональные возможности Vim, связанные с тегами, для перемещения по проекту.
Случайные мысли ...
Для Vim, чтобы найти свой tags
файл (ы) легко, вы должны поставить эту строку в ваших ~/.vimrc
:
set tags=./tags,tags;/
./tags
средств «найдите файл tags
в каталоге текущего файла», tags
означает «искать файл tags
в рабочем каталоге», ;/
означает «продолжайте искать вверх и вверх, пока не достигнете /
».
The TagBar wiki рассказывает об ошибке в jsctags, убедитесь, что вы ее не беспокоите.
jsctags лучше, чем ctags, когда вы пишете сумасшедший «современный» JavaScript с большим количеством обратных вызовов и самоисполняющихся функций. Если ваш JavaScript более традиционен, ctags может быть достаточно.
romainl, объяснения пожалуйста. Я думаю, что у меня работает jsctags, но в тегераре показаны только переменные, методы, закрытие и т. Д. Без разбивки/иерархии, например дерева объектов или ссылки на материал из внешних библиотек (require (..)). Так оно и должно быть? Может быть, ctags могут сделать лучшую работу? Самое большое значение будет иметь возможность курсора на переменную и перейти к исходному файлу, который ее определяет. Надеюсь, у меня есть смысл. – 1001b
Предполагается, что у вас есть иерархический вид с ограниченным охватом. Jsctags должен лучше справляться с областью определения, чем ctags, поэтому вы описываете звуки, подобные этой ошибке в jsctags, упомянутых в вики TagBar. Боюсь, вы должны попробовать отслеживать проблемы в Github для более целенаправленной помощи. Если у вас есть обновленный файл 'tags', нажатие' 'с помощью курсора на переменную должно перейти к определению. См. [This] (https://github.com/romainl/dotvim/blob/master/vimrc#L174) для более дружественной JS-команды. –
romainl
Thx снова. Линия переназначения очень полезна. Как обычно вы организовываете файл тэгов (или как вы называете команду jsctags)? Скрученный характер структуры зависимостей в JS делает вещи менее интуитивными. Например, основные модули сидят в узле, но файлы проекта находятся в другом пути ... Btw, область тегов происходит со мной ... Предлагаемое исправление, согласно вики, не работает, поскольку оно требует downgrade node.js! Любое другое обходное решение? Thx снова. – 1001b