Как я могу запустить 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