我正在使用一个非常大的代码库,我发现选择包含哪些目录用于Exuberant Ctags是有用的。
--exclude
选项可以很好地消除单个文件和目录名称(带有通配符通配符),但我无法弄清楚如何排除包含多个目录的路径模式。
例如,我可能想要排除目录tests
,但仅在处理thirdparty\tests
时(在Windows下)。问题是如果我只使用--exclude=tests
我排除了太多目录,包括我正在积极处理的代码中的测试目录。
以下是我尝试过的一些事情:
--exclude=thirdparty\tests
--exclude=thirdparty\\tests
--exclude=*\thirdparty\tests
--exclude=*\\thirdparty\\tests
--exclude=thirdparty/tests
Ctags默默地忽略了所有这些,这可以通过检查标签文件来证明。
如果目录前面只有给定的父目录,我该如何排除目录?
增加:
这是我的ctags --version
输出:
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Jul 9 2009, 17:05:35
Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
Optional compiled features: +win32, +regex, +internal-sort
答案 0 :(得分:16)
在某些时候,定义您想要编入索引的文件列表可能更容易;将该列表保存到文件中,并使用ctags -L <filename>
仅为所选择的几个编制索引。
这允许您使用find(1)
来修剪您不想索引的目录,例如:
find . -path ./Documentation -prune -o -print > indexme
会跳过./Documentation
所有子目录中的所有文件。
答案 1 :(得分:9)
ack -f | ctags -L -
ack
将列出给定目录中的源文件。您可以使用ack -f --ruby
或ack -f --type=ruby
将范围限制为特定语言。您也可以使用--ignore-dir
排除目录。
使用ack --dump
查看ack的内置文件类型。
答案 2 :(得分:0)
ctags -R --exclude="thirdparty/test/**"
使用“dir/**”修复我的情况