我有以下最小源文件:

$ 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-伪造的!

我喜欢能够通过执行类似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中的错误,因为该文档几乎完全描述了我的使用模式。)

最佳答案

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

我的etags/emacs版本23.1,我认为etags中有一个错误,当文件名带有“./”前缀时,它们会损坏文件名。例如,我拾取了一个名称已损坏的特定文件,并为其生成了带有和不带有“./”前缀的TAGS文件。损坏仅发生在带有“./”前缀的地方。

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

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

这对我有用,希望对您有用!

关于emacs - 为什么etags会生成损坏的TAGS文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3875122/

10-11 03:00