Ответ 1
set tags=tags;/
Это проверит текущую папку для файла тегов и продолжит работу с одним каталогом до корневой папки. Итак, вы можете быть в любой подпапке в своем проекте, и она сможет найти файлы тегов.
Я пытаюсь установить настройки с (exuberant) ctags на Vim сегодня, и мне трудно заставить его работать правильно. Я создаю файл ctags в командной строке с помощью:
cd myproj
ctags -R
Это помещает файл тегов в корень myproj. Тем не менее, Vim только, кажется, читает из этого файла тегов, когда я работаю над источником, который находится в корне. Когда я перехожу к более глубоким каталогам, если я попытаюсь перейти к тегу с помощью <C-]>
, я получаю:
E433: No tags file
E426: tag not found: MyClassName
Я проверил, что у MyClassName есть тэг в файле тегов, просто Vim его не видит. Может кто-нибудь объяснить, как настроить Vim для ссылки на файл корневых тегов?
Спасибо.
set tags=tags;/
Это проверит текущую папку для файла тегов и продолжит работу с одним каталогом до корневой папки. Итак, вы можете быть в любой подпапке в своем проекте, и она сможет найти файлы тегов.
Существует возможность сообщить Vim, где искать файл тега.
Я использую следующую конфигурацию:
" search first in current directory then file directory for tag file
set tags=tags,./tags
Извлечь из справки:
Когда имя файла тега начинается с "./", '.' заменяется на путь текущий файл. Это позволяет использовать файл тегов в каталоге где текущий файл (независимо от текущего каталога). Идея использования "./" заключается в том, что вы можете определить, какой файл тега искать сначала: в текущий каталог ( "теги,./теги" ) или в каталоге текущего файла ( "./tags,tags" ).
Например: : set tags =./tags, tags,/home/user/commontags
И я сохраняю текущую рабочую директорию в топ-каталоге проекта, где создается мой tags
файл.
Используйте :pwd
, а затем :cd myproj
(внутри Vim), чтобы перейти в каталог, содержащий ваш файл тегов.
Подробнее о пути тегов см. :help tags-option
.
Вероятно, вы ошибаетесь, либо находитесь в неправильном каталоге, либо ваш параметр tags
установлен неправильно.
Если вы создаете файл тегов для каждого проекта, вам может понравиться этот шаблон, особенно если вы делитесь своим .vimrc
на разных машинах:
let repohome=substitute($REPO_HOME, "\/", "\\\\/", "g")
let &tags=substitute(expand("%:p:h"), "\\(".repohome."/.\\{-}\/\\).*", "\\1tags", "")
Затем вам нужно будет установить переменную окружения $REPO_HOME в .bashrc
в основной каталог репо без конечного пространства (например, /home/<yourusername>/repos
), и он автоматически ищет файл тегов в каждом подкаталоге $REPO_HOME с глубиной 1, например /home/<yourusername>/repos/myproj/tags
.
#!/bin/sh
FREEZE_NAME=/* Give some version number */
mkdir $HOME/ctags/$FREEZE_NAME
V1=/* Software Path */
find $V1 -name "*.h" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/h.tags
find $V1 -name "*.c" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/c.tags
cd $HOME/ctags/$FREEZE_NAME/
rm -f all.tags
cat c.tags h.tags >> all.tags
sort all.tags > temp.tags
mv temp.tags all.tags
rm -f c.tags h.tags
Поместите вышеуказанный код в .sh файл и запустите... Это точно сгенерирует ваши теги.