Советы по настройке сложных путей поиска CTAGS - PullRequest
8 голосов
/ 17 ноября 2009

Я хочу иметь возможность запускать vim в произвольном подкаталоге в моем проекте, и он должен искать в корне проекта файл tags, а затем искать в несвязанном каталоге за пределами дерева проекта.

Например, скажем, у меня есть следующее:

~/projects/foo/bar/baz.c
~/projects/foo/tags
~/some/arbitrary/path/tags

Я хочу открыть baz.c из подкаталога bar, сделать так, чтобы он нашел foo/tags, а затем поиск some/arbitrary/path/tags, если символ не найден в foo/tags.

Теперь я знаю, что могу сделать:

set tags=./tags,tags;

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

set tags=./tags,tags,~/some/arbitrary/path/tags;
set tags=./tags,tags;~/some/arbitrary/path/tags

Первый находит только символы из ~/some/arbitrary/path/tags, а второй находит только символы в файле тегов в корне проекта.

Кто-нибудь знает, как это сделать? Я на Linux покупаю путь.

Ответы [ 5 ]

5 голосов
/ 02 декабря 2009

Я использую:

set tags=~/.tags
set tags+=~/.vim/tags/cpp
set tags+=~/src/git/gitsrc/tags
" and so on...

Для генерации тегов в корне конкретного проекта:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

Я адаптировал эту настройку из подсказки vim о завершении кода C ++ .

0 голосов
/ 12 апреля 2017

Синтаксис в одну строку для установленных тегов должен быть:

set tags=./tags,tags;,~/some/arbitrary/path/tags

Запятая отсутствовала после тегов;

0 голосов
/ 17 ноября 2009

Ваша первая опция «установить теги» работает для меня в Linux. (Как и прежде, я делал это раньше, и я просто воссоздал это, чтобы быть уверенным.) Вы можете иметь много разных путей в вашем теге, как абсолютных, так и относительных. Однако во втором у вас есть точка с запятой в середине списка, что неверно. На самом деле, вам не нужна точка с запятой. Я также на всякий случай заменил бы ~ абсолютным путем к вашему дому и удалил бы точки с запятой все вместе. Просто ставьте запятые между каждым путем.

Да, и для поиска в каталоге файла тегов вам нужно "../tags", а не "./tags". Одна точка означает текущий каталог, две точки - один каталог, откуда вы находитесь.

0 голосов
/ 20 ноября 2009

Всегда ли файл тегов находится в каталоге проекта /? Если это так, вам не нужно «искать», чтобы найти файл тегов. Просто жестко запишите путь к обоим файлам следующим образом:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags

Если нет, вы можете попробовать что-то вроде этого:

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags

Я не пробовал это, поэтому вам, возможно, придется поэкспериментировать с этим. Есть некоторые предварительные условия для его работы. См .: поиск файлов справки.

0 голосов
/ 17 ноября 2009

замените тильду на путь к вашему дому.

...