2012-03-28 87 views
1

当设置为Git项目的Emacs,我使用如何为多个git项目设置标签文件(etags)?

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

这会在当前目录下的标签文件。我常常想包括从另一个项目符号,所以我附上他们绝对路径:

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

然而,当我有两个混帐

git ls-files /path/to/git_project 

将无法​​正常工作:git的告诉我,该路径在当前存储库之外。我可以将其放入它,但是然后打印在标准输出上的路径与标签文件不相关,所以emacs不会找到它们。

有没有什么优雅的方法可以解决这个问题?所有进入我脑海的是一些过于复杂的shell脚本魔术,在将每行前缀添加到xargs之前...

回答

1

对不起,我不是emacs用户。我会告诉你我怎么会做这样的VIM,这样也许你能得到同等解决方案的理念为Emacs:

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

这两个设置允许我跳在两个项目中发现的标签。

+0

听起来是个好办法,但我不't认为emacs支持加载多个标记文件(?) – maxy 2012-05-30 08:49:37

0

我想你想要的是

{ 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 
+0

有趣,但它与cd'ing到目录具有相同的效果 - 文件相对于目录列出,但我需要它们相对于TAGS文件(或与绝对路径)。 – maxy 2012-05-30 08:46:24