Всем привет, с вами еженедельная рубрика "Секреты Вим". В мало-мальски большом программном коде всегда будет множество определений: функций, процедур, классов, макросов, переменных, структур и тому подобное. Если файл один, еще можно выкрутиться поиском по слову: * ищет слово под курсором вперед, # — назад. Если файлов много, это уже не сработает. Да, есть vimgrep, который может искать по файлам, но это не то: нам нужно прыгнуть на определение функции; а потом вернуться.
Существует несколько программ, которые анализируют программный код и составляют tag-файлы особой структуры. В них указаны имена, файл, в котором они определены, номер строки и другая информация.
Например:
ctags — только Си, но exuberant ctags (файл тоже ctags) знает много языков, включая Фортран, Перл, Питон, Go, HTML и TeX.
etags рассчитан на emacs, но Вим его понимает.
Есть Jtags (на и для Java), ptags.py (на и для Питона),
ptags (на и для Перла).
Вим поддерживает стек переходов. Пусть у нас есть проект. Мы вызываем команду ctags *.f90 и получаем файл вроде tags.
Далее, пусть, например, у нас вызывается функция solve_BVP; встав на нее курсором, мы нажимаем <C-]> (control+]) и переходим в другой файл (или в пределах этого же) на определение функции. В ней вызывается другая функция: BC_Dirichlet. Поступаем так же. Просмотрев код, а то и подредактировав, возвращаемся: <C-T>. Глубина — 20 переходов: обычно хватает. Потом старые метки теряются и труднее вернуться.
По тому же принципу устроена справка Вим. Там есть выделенные слова: это вроде ссылок. Переход <C-]>, возврат <C-T>.
Есть команды: :tag туда, :pop обратно.
Если выставлен флаг ignorecase, то и тэги ищутся без учета регистра, что логично.
Есть средства выбора тэга, если их несколько. Например, в нескольких файлах есть приватная функция с одним и тем же именем. Например, tselect (и его напарница g]). А stselect открывает так в новом окне Вим.
Переписывать всю справку не стоит. help tags.
Это очень, очень удобная штука!
Есть ещё прямой способ перейти в файл, имя которого под курсором: <C-F>.