Как настроить файл TAGS (etags) для нескольких проектов git?

При настройке Emacs для проекта GIT, я использую

git ls-files | xargs -d\\n etags

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

etags -a /path/to/project/*.[ch]

Тем не менее, когда у меня есть два репозитория git

git ls-files /path/to/git_project

не будет работать: git говорит мне, что путь находится за пределами текущего хранилища. Я мог бы зайти в него, но тогда пути, напечатанные на stdout, не относятся к файлу TAGS, поэтому emacs не найдет их.

Есть какой-нибудь элегантный способ решить эту проблему? Все, что приходит мне в голову, - это какая-то чрезмерно сложная магия сценариев оболочки, которая добавляет префикс к каждой строке перед передачей в xargs...

2 ответа

Извините, я не пользователь emacs. Я расскажу вам, как бы я это сделал в vim, чтобы вы могли получить представление об эквивалентном решении для emacs:

:set tags=/path/to/project1/tags,/path/to/project2/tags
:set path=/path/to/project1,/path/to/project2

Эти две настройки позволяют мне перейти к тегам, найденным в обоих проектах.

Я думаю, что вы хотите

{ git ls-files; git --git-dir=/path/to/the/other/project\'s/.git ls-files; } \
| xargs -d\\n etags

Если вы хотите добавить относительный путь в начало имен, просто сделайте это:

{ git ls-files
  git --git-dir=path/to/other/.git ls-files | sed s,^,path/to/other,
} | xargs -d\\n etags
Другие вопросы по тегам