我有以下最小源文件:
$ 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
的事情来生成标签。 .但是当我这样做时,它会破坏大多数文件名。知道为什么它会像这样失败,和/或我可以做些什么来使它工作?
Ubuntu 清醒。 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 称为 etags ./path/xx/yy/fooBar.c
,它会损坏文件。因此,解决方法是确保 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/