10

标准 GNUetags不支持 exuberant 所做的递归遍历目录ctags -R。如果我只能访问 GNU etags,我如何使用 bash shell 魔术来获取 etags 为当前目录中的所有 C++ 文件*.cpp*.h文件以及当前目录下的所有目录递归生成一个 TAGS 表具有正确路径名的当前目录,用于emacs解析 TAGS 表条目。

4

4 回答 4

19

Emacs Wiki通常是解决常见问题或最佳实践的好来源。对于您的具体问题,有适用于 Windows 和 Unixen 的解决方案:

http://www.emacswiki.org/emacs/RecursiveTags#toc2

基本上,您运行一个命令来查找所有.cpp文件.h(如果您使用不同的文件结尾,例如,请更改文件选择器.C)并将结果通过管道传输到 etags。由于 Windows 似乎没有 xargs,因此您需要可以从标准输入读取的更新版本的 etags(请注意该行末尾的破折号表示标准输入)。当然,如果您使用最新版本的 etags,您也可以使用 dash 参数而不是 xargs。

窗户

cd c:\source-root
dir /b /s *.cpp *.h *.hpp | etags --your_options -

Unix

cd /path/to/source-root
find . -name "*.cpp" -print -or -name "*.h" -print | xargs etags --append
于 2012-05-25T02:09:35.007 回答
5

此命令以递归方式为 .c、.cpp、.Cpp、.hpp、.Hpp .h 文件创建默认名称为“TAGS”的 etags 文件

find . -regex ".*\.[cChH]\(pp\)?" -print | etags -
于 2016-05-16T18:03:36.500 回答
2

此处发布的大多数答案都将find输出传递到xargs. 如果目录树内的文件名中有空格,则会中断。

如果文件名(用于.c.h文件)中有空格,则更通用的解决方案可能是:

find . -name "*.[cChH]" -exec etags --append {} \;
于 2019-07-01T20:06:32.010 回答
0

使用查找。如果需要,请查找。

于 2012-05-24T13:17:15.793 回答