我有以下最小的源文件:
$ 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中的一个错误,因为文档几乎完全描述了我的使用模式.)
我面临同样的问题.但是,鉴于您没有提供etags/emacs版本,我使用的不是百分之百,我们正在谈论同样的问题.
我的etags/emacs版本23.1,我认为etags中有一个错误,当它们以"./"作为前缀时,会破坏文件名.例如,我选择了一个名称已损坏的特定文件,并为其生成了带有和不带"./"前缀的TAGS文件.腐败只发生在"./"前缀.
我 - 解决问题 - 解决方案是在将文件名提供给"etags"之前剪切"./"前缀.我是这样做的:
find . -name '*.[hc]' -print | cut -c3- | xargs etags -
Run Code Online (Sandbox Code Playgroud)
这对我有用,希望它能帮到你!
我刚刚注意到上面我原来的问题中两种用途之间的区别是领先的 . 在路上。如果我像 etags ./path/xx/yy/fooBar.c 这样调用 etags,它会损坏文件。因此,解决方法是确保 etags 的参数没有前导标签。(也许这是 etags 中的一个错误,因为文档几乎完全准确地描述了我的使用模式。)