Путь к тегам в VIM для нескольких проектов - PullRequest
4 голосов
/ 06 октября 2010

Я недавно начал использовать ctags в своих проектах.В настоящее время у меня есть следующие настройки:

root/tags [contains all non-static tags]
root/foo/tags [contains static tags for the foo directory]
root/bar/tags [static]
root/something/else/tags [etc.]
...

Я могу set tags=./tags,tags,/path/to/root/tags, и все работает отлично.

Однако моя проблема заключается в том, что я работаю над несколькими проектами одновременно, поэтому у меня есть,например, /path/to/root1, /path/to/root2 и /path/to/root3 одновременно.Я бы предпочел не устанавливать теги вручную каждый раз, когда открываю файл;Есть ли способ, которым я могу иметь теги для /path/to/rootX на основе файла, который я редактирую?(то есть, если я редактирую /path/to/root3/foo/x.c, используйте теги в root3/tags?

В моем случае все мои проекты имеют общий родительский каталог; что я действительно хочу, так это:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "")

но я не могу получить правильный vimfu, чтобы он работал.

РЕДАКТИРОВАТЬ: Я только что понял, что это не сработает; я не могу написать root* Вместо этого я хотел бы сохранить свой основной файл ctags в ~/ctags/root*/tags, где есть отображение 1: 1 между подкаталогами ~/ctags/ и /path/to/ [Для тех, кому интересно, это DynamC ClearCase UCM dynamicвиды; ни /view/XXX/, ни /view/XXX/vobs/ не доступны для записи]

1 Ответ

2 голосов
/ 06 октября 2010

Если вы хотите:

set tags=./tags,tags,substitute("%:p:h", "\(^\/path\/to\/.*/\).*$", "\1", "")

Попробуйте:

let &tags = './tags,tags,' . substitute(expand("%:p:h"), "\(^\/path\/to\/.*/\).*$", "\1", "")

В команде :set нет расширения.Кроме того, «%: p: h» не будет расширяться автоматически, поэтому используйте expand().Смотри:

:help :let-option
:help expand()
...