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

bst*_*rre 6 tags emacs etag

我有以下最小的源文件:

$ cat path/xx/yy/fooBar.c 
void this_is_a_test(void)
{
}
Run Code Online (Sandbox Code Playgroud)

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

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


path/xx/yy/fooBar.c,25
void this_is_a_test(1,0
Run Code Online (Sandbox Code Playgroud)

但是如果我通过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
Run Code Online (Sandbox Code Playgroud)

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

我喜欢通过做类似的事情来生成TAGS find . -name '*.[ch]' | xargs etags.但是当我这样做时,它正在破坏大多数文件名.

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

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
Run Code Online (Sandbox Code Playgroud)

新信息:

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

msh*_*mma 6

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

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

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

find . -name '*.[hc]' -print  | cut -c3- | xargs etags -
Run Code Online (Sandbox Code Playgroud)

这对我有用,希望它能帮到你!


bst*_*rre 1

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