我有以下最小源文件:
$ 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/