为什么etags会生成损坏的TAGS文件?

时间:2010-10-06 17:12:02

标签: emacs tags etag

我有以下最小的源文件:

$ cat path/xx/yy/fooBar.c 
void this_is_a_test(void)
{
}

如果我运行这样的etags,它可以正常工作:

$ etags path/xx/yy/fooBar.c 
$ cat TAGS 


path/xx/yy/fooBar.c,25
void this_is_a_test(1,0

但如果我通过find / xargs运行etags,则TAGS文件已损坏:

$ find . -name fooBar.c
./path/xx/yy/fooBar.c
$ find . -name fooBar.c | xargs etags
$ cat TAGS


path/xx/yy/fBoBar.c,25
void this_is_a_test(^?1,0

请注意,文件名在上面显示为fBoBar.c - bogus!

我希望通过find . -name '*.[ch]' | xargs etags这样的方式生成TAGS。但是当我这样做时,它正在破坏大多数文件名。

知道为什么它会像这样失败,和/或我能做些什么才能让它发挥作用?

Ubuntu Lucid。 Etags来自emacs23-bin-common 23.1 + 1-4ubuntu7。

修改

回应fschmitt的提问:

$ etags $(find . -name fooBar.c)
$ cat TAGS 


path/xx/yy/fBoBar.c,25
void this_is_a_test(1,0

新信息

我刚才注意到上面原始问题中两种用法之间的区别在于路径上的前导.。如果我调用像etags ./path/xx/yy/fooBar.c这样的etags,它会破坏文件。因此,解决方法是确保etags的args没有前导标记。 (也许这是etags中的一个错误,因为文档几乎完全描述了我的使用模式。)

5 个答案:

答案 0 :(得分:6)

我面临同样的问题。但是,鉴于您没有提供etags / emacs版本,我使用的不是100%,我们正在谈论同样的问题。

我的etags / emacs版本23.1,我认为etags中存在一个错误,当它们以“./”作为前缀时会破坏文件名。例如,我选择了一个名称已损坏的特定文件,并为其生成了带有和不带“./”前缀的TAGS文件。腐败只发生在“./”前缀。

我的 - 解决问题 - 解决方法是在将文件名提供给“etags”之前剪切“./”前缀。我是这样做的:

find . -name '*.[hc]' -print  | cut -c3- | xargs etags -

这对我有用,希望它适合你!

答案 1 :(得分:1)

我刚才注意到上面我原来问题中两种用法之间的差异是领先的。在路上。如果我像etags ./path/xx/yy/fooBar.c那样调用etags,它会破坏文件。因此,解决方法是确保etags的args没有前导标记。 (也许这是etags中的一个错误,因为文档几乎完全描述了我的使用模式。)

答案 2 :(得分:0)

在etags之后需要-才能从stdin中读取它:

find . -name fooBar.c | xargs etags -

修改

哎呀,我真的应该读完整个问题。我不知道为什么它会破坏文件名。但你仍然应该使用-:)

答案 3 :(得分:0)

这很奇怪。如果你这样做会发生什么

etags `find . -name '*.c'` `find . -name '*.h'`

代替?

答案 4 :(得分:0)

这就是我的所作所为:

etags --members `find ./ | grep [ch]$`

HTH。