Vim: Как перейти к объявлению (класса, метода, функции, переменной и т.д.)
Сейчас я работаю над файлом, который использует много классов, методов, функций, переменных и т.д. Можно ли перейти к объявлению всех из них? Пожалуйста, учтите, что некоторые из этих объявлений находятся в одном файле, но другие находятся в других файлах (которые не могут быть открыты и вы не знаете, где находятся объявления, но они существуют). Что произойдет, если декларация будет на один уровень выше в каталоге? и что, если он на один уровень ниже?
Это делается по-другому в соответствии с языком программирования, о котором мы говорим, или процедура поиска объявлений одинакова независимо от языка?
Я читал и кажется, что решение связано с тегами. Однако я хотел бы знать, как это может быть достигнуто (шаг за шагом), особенно принимая во внимание, что в некоторых случаях мы говорим о определениях в других файлах.
Я знаю, что это можно сделать с помощью IDE, но я хотел бы знать, насколько это может быть достигнуто с помощью vim.
У меня только новая установка Vim. Я еще не установил плагины, но готов сделать, если это необходимо. Возможно, это можно сделать без и с плагинами.
Спасибо заранее!
Ответы
Ответ 1
Настройка тегов не так сложна, хотя (как и большинство вещей в Vim) она не такая автоматическая по сравнению с IDE.
- Сначала вам понадобится инструмент
ctags
. Наиболее распространенным сегодня является Exuberant Ctags, найденный в ctags.sourceforge.net.
- Затем вам нужно создать базу данных тэгов (имена файлов
tags
) для всех файлов в вашем проекте (проектах). Обычно это делается путем запуска ctags -R .
из корня проекта (также изнутри Vim через :!ctags ...
). Exuberant Ctags поддерживает 41 язык, и вы даже можете продлить его с помощью регулярных выражений.
- Наконец, Vim необходимо настроить для сбора базы данных тэгов. С помощью
:set tags=./tags;
он будет искать в каталоге файлов вверх в корневой каталог. Если у вас есть определенные глобальные каталоги include, вы можете добавить их.
- С этим вы можете начать использовать теги Vim, такие как
<C-]>
и :tag
.
Вам необходимо периодически обновлять базу данных тэгов; есть плагины (например easytags.vim), которые могут сделать это автоматически для вас.
Ответ 2
Вы можете попробовать gd
, он переходит в локальную декларацию, для более мощного "перехода к определению" вы можете попробовать tags
, как предположил Инго.