如何递归创建 ctags 文件?

Posted

技术标签:

【中文标题】如何递归创建 ctags 文件?【英文标题】:how do I create a ctags file recursively? 【发布时间】:2016-08-27 22:14:56 【问题描述】:

我想使用ctags 创建一个标签文件以获得完整的源代码树。现在我通常会运行ctags *.c,但问题出在顶层目录中,没有源文件。 另外,我想让它接收*.c,*.h,*.cpp & *.hpp 文件,我该怎么做?

【问题讨论】:

ctags --recursectags -R 应该可以工作。您使用的是哪个版本的 ctags? @WilliamPursell Ctags 5.9~svn20110310 来自 Ubuntu 存储库,如果您添加您的评论作为答案,我会接受它! 【参考方案1】:

您可以使用ctags --recursectags -R 递归地下降到目录树中。

【讨论】:

在 Ubuntu 18.04 上,当我尝试这个时,安装了 ctags,但它不支持 --recurse。我做了sudo apt-get install ctags,然后效果很好。 请注意,emacs-ctags 没有--recurse,详细的 (-v) 应该供应商或检查帮助输出以查看它是否具有递归 -R 在 ctags (GNU Emacs 27.2) 中忽略正则表达式【参考方案2】:

如果你想为你的 git repo 中的 c/c++/javascript/java/python 文件生成标签(尊重 .gitignore):

git ls-files | ctags --links=no --languages=c,c++,javascript,java,python -L- 

【讨论】:

【参考方案3】:

如果根目录中没有任何源,最好的过滤方法是使用--languages 选项。这是我用于混合语言项目的一个,我只想要 Tcl 文件的标签。

ctags -R --languages=Tcl .

注意,如果您需要支持多种语言,可以使用 , 添加它们,

要查看语言列表,请使用--list-languages

【讨论】:

【参考方案4】:

您可以按照其他人的建议使用ctags -Rstags --recurse

但是,正如用户 cxw 所说,这在 Ubuntu 18.04 上不起作用。

这是我发现的。默认安装有:

# ctags --version
ctags (GNU Emacs 25.2)
Copyright (C) 2017 Free Software Foundation, Inc.
This program is distributed under the terms in ETAGS.README

然后,在sudo apt-get install ctags 之后,我得到:

# ctags --version
Exuberant Ctags 5.9~svn20110310, Copyright (C) 1996-2009 Darren Hiebert
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

现在递归选项起作用了。

【讨论】:

以上是关于如何递归创建 ctags 文件?的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu下安装ctags和taglist

如何递归加载 Azure blob 文件列表?

如何在 C# 中递归获取文件路径? [复制]

OutOfMemoryError:Java 堆空间。如何修复递归方法中发生的这个错误?

递归查找目录下所有指定文件(包括深层目录)

如何检查递归步骤的最后一个数并为小于 n 的递归步骤创建一个空元素?