Как я могу запустить ctags в большой базе кода?
Предполагая, что у меня есть структура каталога кода следующим образом:
/top
/second
/core
a.pl
b.pl
c.pl
/common
d.pl
e.pl
/util
f.pl
g.pl
h.pl
Где я должен запустить ctags
, чтобы я мог перейти к определениям функций через vi
?
Например, у меня было:
/dir
/perl
a.pl
И я запускаю в dir
команду ctags -R perl
, но в a.pl
я не могу перейти к определению функции, которое существует в том же файле.
Если бы я знал ... ctags -R .
внутри каталога perl
он работал.
ctags
в core, common,util
? Что делать, если моя кодовая база огромна? Действительно ли мне нужно запускать его в каждом каталоге?2 ответа:
Обычно вы используете только один файл
tags
, расположенный в корневом каталоге вашего проекта.Например, чтобы пометить весь исходный код Vim, расположенный в
~/src/vim-7.3
, вы переходите в этот каталог и генерируете файл тегов там.$ cd ~/src/vim-7.3 $ ctags -R
Вот и все.
Вы можете сделать то же самое изнутри Vim, конечно. Запустите Vim и введите:
:cd ~/src/vim-7.3 :!ctags -R
Проверьте правильность установки
'tags'
. По умолчанию используется./tags,tags
, что означает, что Vim будет искать файлtags
в текущий каталог.Обязательно прочитайте
:h 'tags'
во всей своей полноте. Вы можете поручить Vim искать файлыtags
глубоко в дереве каталогов, задав шаблоны, содержащие подстановочные знаки.Еще одна вещь: для того, чтобы этот подход работал, текущий рабочий каталог Vim должен всегда оставаться в корне. Если у вас есть какая-то опция, например
'autochdir'
установить или постоянно переключать каталоги самостоятельно, тоtags
, очевидно, не будет найден.
Ваш файл
tags
должен быть сгенерирован в первом общем предке вашего кода (в вашем случае это будетsecond
) с помощью$ ctags -R .
.Я бы предложил вам добавить эту строку в ваш
~/.vimrc
, чтобы Vim всегда находил вашtags
файл, независимо от того, где вы находитесь в вашем проекте и независимо от того, какой" текущий каталог":set tags=./tags;/,tags;/
Он работает так же, как и в ответе @glts с интересным поворотом: из-за части
;/
Vim смотрит вверх и вверх, пока/
не найдет файлtags
. Предположим, что вы редактируетеg.pl
, Vim правильно использует ваш файлtags
, расположенный вsecond
.:h tags :h ctags