Как заставить ctags работать внутри vim

Я новичок в vim и хотел, чтобы работала интеграция ctags, чтобы мне было легче ориентироваться в большом java-проекте.

Я вытащил zip из исходной кузницы и извлек его, но отсюда я не уверен, как заставить его работать с vim

Любая помощь для начинающего пользователя vim была бы замечательной!


person JimmyBond    schedule 04.04.2011    source источник
comment
Все опубликованные ответы имеют свои индивидуальные достоинства, но обратите внимание на параметр -R - гораздо чаще рекурсивно вызывать ctags для всей структуры каталогов, чем запускать его для отдельных файлов.   -  person Cascabel    schedule 05.04.2011


Ответы (5)


Вот что я делаю:

  1. ctags -n -f [OUTPUT] [SOURCE] для создания тегов (ПРИМЕЧАНИЕ: -n относится ко мне, но может не быть необходимым для вашего использования)
  2. exec "set tags=" . [OUTPUT] внутри .vimrc, чтобы vim узнал о тегах

РЕДАКТИРОВАТЬ: я использую

  • Exuberant Ctags 5.5.2
  • VIM 6.1

Дополнительная информация:

  • См. Использование ctags здесь
  • Советы и рекомендации от SO
person nevets1219    schedule 04.04.2011
comment
Почему вы переопределяете имя вывода по умолчанию? (Вам не пришлось бы переопределять значение параметра тегов в vim, если бы вы использовали значение по умолчанию.) Почему вы используете -n вместо того, чтобы позволить ctags использовать его обычный вывод excmd? (Обычный формат намного более устойчив к изменениям в исходном коде.) - person Cascabel; 05.04.2011
comment
У меня есть несколько выпусков, над которыми я работаю, и я могу изменить выпуск, в котором я работаю. Указание имени файла позволяет мне автоматически переключать файл тегов, с которым я работаю, поскольку он основан на переменной среды. -n используется, поскольку я работаю с кодом C и основан на руководстве, которое в любом случае уже используется . - person nevets1219; 05.04.2011
comment
Еще раз взгляните на руководство. -n не по умолчанию. Если вы не укажете его, будет использоваться шаблон, а не число (за исключением тегов определения макроса). Достаточно легко проверить на себе. И, как говорится в руководстве, использование чисел означает, что если вы измените исходный код, он перейдет на неправильную строку. - person Cascabel; 05.04.2011
comment
По умолчанию из того, что я читал, было mixed, что, как он утверждает, по существу numbers для кода C из того, что я читал. Я неправильно это истолковываю? - person nevets1219; 05.04.2011
comment
Ах, кажется, pattern используется для mixed и numbers только для макросов C. Вы можете прочитать плюсы и минусы каждого метода и решить, что лучше. Я думаю, что выбрал numbers из-за повторяющихся записей, но точно не могу вспомнить. Для справки, при использовании numbers размер файла тегов составляет ~ 9,2 МБ, в противном случае - ~ 13,4 МБ, если размер файла вообще имеет значение. - person nevets1219; 05.04.2011
comment
Да, у чисел есть много преимуществ, но я обнаружил, что, когда я много меняю исходный код, числа часто упускаются из виду. Меня не особо беспокоят несколько МБ, просто ctags работают правильно. Я могу полностью понять, что предпочитаю числа - если вы переименуете вещи, они все равно будут работать, а шаблоны - нет. - person Cascabel; 05.04.2011

Поскольку в этих ответах никто не указал одну критическую функцию, я дам еще один несколько более точный ответ.

Самый простой способ использовать ctags с vim - вызвать:

ctags -R *

из корня вашего исходного репозитория. Это создаст файл tags в том же каталоге.

Добавьте в свой ~/.vimrc файл этот короткий блок:

 " ctags optimization
 set autochdir
 set tags=tags;

" обозначает комментарий. set autochdir сообщает vim, что если он не найдет tags файл в $PWD, он будет рекурсивно искать tags файл в родительском каталоге. set tags=tags; сообщает vim, что имя вашего tags файла всегда будет таким же, как имя tags файла по умолчанию, сгенерированного ctags.

Пока вы запускаете ctags -R * в корневом исходном каталоге в первый раз и время от времени обновляете его (если вы получаете новые изменения от других), у вас всегда будет быстрый и интуитивно понятный поиск символов ctags в vim.

person Thomson Comer    schedule 27.05.2014
comment
При этом не создаются теги для подкаталогов под ним. - person Zen; 08.07.2014
comment
Привет, Дзен, ctags -R * просматривает дерево каталогов в PWD и помещает все теги в один файл ./tags. Вам нужен только один файл тегов для всего вашего репозитория. - person Thomson Comer; 08.07.2014
comment
У меня не было ничего, кроме проблем с autochdir, поэтому вместо этого я использую этот параметр: autocmd BufRead,BufEnter * silent! lcd %:p:h:gs/ /\\ /. Это все еще отсутствует при использовании -tab-remote* аргументов в Vim, но этого достаточно для 99% моих нужд. (Мне просто нужно :e файлы вручную, когда это не срабатывает.) - person dash-tom-bang; 13.12.2017

Используя обильные ctags, я использую что-то вроде этого в базовом каталоге моего проекта (исключая каталог "log"):

ctags -R --exclude=log *
person coder_tim    schedule 05.04.2011

Вы должны запустить команду ctags с исходными файлами в качестве аргументов. Это создаст файл тегов, содержащий всю информацию. Затем вы можете открыть файл с помощью vim и, например, нажмите Ctrl-] в строке с функцией, чтобы перейти к коду этой функции. Если vi запускается не в том же каталоге, что и файл тега, вы можете установить его с помощью :set tags=<file>

person steabert    schedule 04.04.2011

посмотрите эту статью: vim-easytags. Я не пробовал, но выглядит неплохо. создание и обновление тегов вручную было действительно раздражающим. надеюсь, это поможет. :)

person jmatraszek    schedule 05.04.2011