Есть ли рубин-специфичная альтернатива ctags?
Exuberant ctags просто не работает должным образом в некоторых случаях.
Используя обильные ctags, я получаю совершенно неверное определение:
Coordinator#reporter
даже не используется, когда я запускаю код, о чем свидетельствует отсутствие first
выводится на консоль, и все же ctags непреклонен в том, что на этот метод ссылается @configuration.reporter
Я сгенерировал свои теги с
ctags -RV .
Я использую Ubuntu 14.04
Используя ruby-mine, чтобы найти определение, он работает безупречно:
Тем не менее, рубиновый рудник очень дорогой и не с открытым исходным кодом.
Так есть ли альтернатива обильным ctags? Рубиновая альтернатива?
1 ответ
Я не знаком с ruby-mine, но могу сказать, что Ctags ничего не знает о типах объектов, миксинах, наследовании и т. Д. Из документации:
- Почему при переходе к тегу я оказываюсь не на той строке?
По умолчанию ctags кодирует номер строки в файле, где находятся теги макросов (#define). Это было сделано для обеспечения совместимости с исходной версией ctags для UNIX. Если вы измените файл, содержащий тег, без перестроения файла тега, местоположение тега в файле тега может больше не соответствовать текущему местоположению. Чтобы избежать этой проблемы, вы можете указать опцию --excmd=p, которая заставляет ctags использовать шаблон поиска для поиска тегов макроса. Я никогда не раскрывал причину, по которой исходные ctags UNIX использовали номера строк исключительно для макросов, но до сих пор сопротивлялся изменению поведения Exuberant Ctags по умолчанию, чтобы вести себя по-другому.
В vim вы можете просто запустить вызов определения тега C-]
и если вы оказались не в том месте, введите:
:taglist
Это отобразит список тегов, и вы сможете выбрать, к какому файлу / методу добавить определение.
Вы также можете перемещаться по :tnext
а также :tlast
в VIM