2013-03-15 4 views
6

Мне нужна помощь по настройке ctags, jsctags и tagbar, поэтому я могу иметь работоспособную редакционную редакцию Javascript. Я все установил, но не мог понять, как ctags и jsctags работают вместе, поэтому я не знаю, как правильно настроить. Я сделал довольно много Google, но информация довольно сломана и не имеет согласованности. У меня ошибка, похожая на этот пост, ctags and tagbar configuration are out of sync. Я нахожусь на OS X горном льве и iterm2.ctags, jsctags/doctorjs, Tagbar шаг за шагом

Любая помощь была бы принята с благодарностью. Пошаговые инструкции были бы превосходными.

Thx.

ответ

5

Во-первых, вы должны понимать, что 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 может быть достаточно.

+0

romainl, объяснения пожалуйста. Я думаю, что у меня работает jsctags, но в тегераре показаны только переменные, методы, закрытие и т. Д. Без разбивки/иерархии, например дерева объектов или ссылки на материал из внешних библиотек (require (..)). Так оно и должно быть? Может быть, ctags могут сделать лучшую работу? Самое большое значение будет иметь возможность курсора на переменную и перейти к исходному файлу, который ее определяет. Надеюсь, у меня есть смысл. – 1001b

+0

Предполагается, что у вас есть иерархический вид с ограниченным охватом. Jsctags должен лучше справляться с областью определения, чем ctags, поэтому вы описываете звуки, подобные этой ошибке в jsctags, упомянутых в вики TagBar. Боюсь, вы должны попробовать отслеживать проблемы в Github для более целенаправленной помощи. Если у вас есть обновленный файл 'tags', нажатие' 'с помощью курсора на переменную должно перейти к определению. См. [This] (https://github.com/romainl/dotvim/blob/master/vimrc#L174) для более дружественной JS-команды. – romainl

+0

Thx снова. Линия переназначения очень полезна. Как обычно вы организовываете файл тэгов (или как вы называете команду jsctags)? Скрученный характер структуры зависимостей в JS делает вещи менее интуитивными. Например, основные модули сидят в узле, но файлы проекта находятся в другом пути ... Btw, область тегов происходит со мной ... Предлагаемое исправление, согласно вики, не работает, поскольку оно требует downgrade node.js! Любое другое обходное решение? Thx снова. – 1001b

Смежные вопросы