После создания файла тегов с помощью exuberant-ctags
я могу перейти от вызова функции к ее объявлению, <C-]>
что довольно удобно.
У меня вопрос, как это сделать по-другому? Когда мой курсор находится на определении функции, как я могу перейти к строкам, где вызывается функция?
Когда я смотрю на файл, сгенерированный ctags, я вижу только информацию, связанную с расположением определения, а не с вызовами, означает ли это, что я не могу этого сделать, что Vim - умный обходной путь или что мне нужно что-то использовать кроме как exuberant-ctags
?
Ответы:
Вы не можете перейти к вызовам функций с помощью
ctags
. Для C / C ++ и Java естьcscope
, и он прекрасно интегрируется с Vim (см.:help cscope
). Для других языков вы можете найти инструмент, который генерирует / экспортируетcscope
совместимые базы данных (например,hscope
для Haskell, а такжеstarscope
для Ruby, Go и JavaScript). Вы также можете использоватьcscope
с GNU глобальных баз данных, указываяcscopeprg
наgtags-cscope
.С другой стороны: если вы не откладываете время от времени озадачивающее использование Engrish,; ) вы, вероятно, также захотите использовать universal-ctags вместо
exuberant-ctags
. Последний не обновлялся годами. Первый - активно поддерживаемая вилка.источник
cscope
сам поддерживает C / C ++, Lex и Yacc. Поддержка Java немного полезна. Вы можете получить поддержку (в старом стиле) PHP и JavaScript из GNUglobal
черезgtags-cscope
утилиту. И, как я сказал выше, существуют другие индексаторы, которые могут экспортироватьcscope
базы данных, совместимые с.Вы не можете сделать это с помощью ctags.
Попробуйте более подходящую альтернативу, такую как cscope (которая даже имеет собственный раздел справки :)
:help cscope
или global .источник
cscope
сама не поддерживает ни PHP, ни JavaScript. Однако вы можете индексировать файлы PHP и JavaScript с помощью GNUglobal
, а затем запускать,gtags-cscope
чтобы использовать полученныйgtags
файл сcscope
.cscope
«S источников , а не спекулировать на основе быстрых экспериментов.cscope
имеет довольно расслабленный синтаксический анализатор C. Это все, что у него есть, и все, что он делает. С этим синтаксическим анализатором он «поддерживает» множество языков, для подходящих значений «поддержка». Конструкции распознаются, если они более или менее похожи на C. Именно поэтому классы Java и более новые конструкции PHP не распознаются. Сравните fi с starcope , который фактически позволяет добавлять новые языки.Вы можете использовать команду Vim grep для поиска всех файлов в вашем проекте:
Давайте поместим это в связку ключей:
Я нахожу этот поиск по всему проекту одним ключом неоценимым, когда исследую большую незнакомую кодовую базу.
\<
и\>
являются регулярными выражениями, которые указывают начало и конец слова, поэтому вы не получите частичных совпадений. (-w
Опция grep может быть другим способом достижения этого.)Однако это неразумный поиск , поэтому он может давать ложные срабатывания, если одно и то же слово появляется в несвязанных контекстах.
По правде говоря , я использую мою собственную модифицированную версию плагина grep.vim . Это немного удобнее использовать:
src/ lib/
вместо.
) и запоминать изменения.\b
должен использоваться вместо\<
и\>
.Я настраиваю его и исключаю некоторые стандартные файлы, подобные этому .
Для быстрого доступа я создаю две комбинации клавиш . F3позволяет мне редактировать командную строку, F4использует предварительно настроенную командную строку без каких-либо дополнительных нажатий клавиш. Механизм довольно уродливый, и может использовать некоторую очистку, но он мне хорошо послужил.
источник