Подтвердить что ты не робот

Vim: сложность настройки ctags. Источник в подкаталогах не видит файлы тегов в корне проекта

Я пытаюсь установить настройки с (exuberant) ctags на Vim сегодня, и мне трудно заставить его работать правильно. Я создаю файл ctags в командной строке с помощью:

cd myproj
ctags -R

Это помещает файл тегов в корень myproj. Тем не менее, Vim только, кажется, читает из этого файла тегов, когда я работаю над источником, который находится в корне. Когда я перехожу к более глубоким каталогам, если я попытаюсь перейти к тегу с помощью <C-]>, я получаю:

E433: No tags file
E426: tag not found: MyClassName

Я проверил, что у MyClassName есть тэг в файле тегов, просто Vim его не видит. Может кто-нибудь объяснить, как настроить Vim для ссылки на файл корневых тегов?

Спасибо.

4b9b3361

Ответ 1

set tags=tags;/

Это проверит текущую папку для файла тегов и продолжит работу с одним каталогом до корневой папки. Итак, вы можете быть в любой подпапке в своем проекте, и она сможет найти файлы тегов.

Ответ 2

Существует возможность сообщить 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 установлен неправильно.

Ответ 3

Если вы создаете файл тегов для каждого проекта, вам может понравиться этот шаблон, особенно если вы делитесь своим .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.

Ответ 4

#!/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 файл и запустите... Это точно сгенерирует ваши теги.