I'm working with a very large code base and I find it useful to be selective about which directories are included for use with Exuberant Ctags.
The --exclude
option works well to eliminate individual file and directory names (with globing wildcards), but I can't figure out how to get it to exclude path patterns containing more than one directory.
For example, I may want to exclude a directory tests
, but only when processing thirdparty\tests
(under Windows). The problem is if I just use --exclude=tests
I exclude too many directories, including a test directory in the code I'm actively working on.
Here are some things I've tried:
--exclude=thirdparty\tests
--exclude=thirdparty\\tests
--exclude=*\thirdparty\tests
--exclude=*\\thirdparty\\tests
--exclude=thirdparty/tests
Ctags silently ignores all these as evidenced by an examination of the tags file.
How can I exclude a directory only when it is preceded by a given parent directory?
ADDED:
Here's my ctags --version
output:
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
At some point it might be easier to define the list of files you do want indexed; save that list to a file, and use
ctags -L <filename>
to index just the chosen few.This lets you use
find(1)
to prune the directories you don't want to index, e.g.:would skip all the files in all subdirectories of
./Documentation
.ack
will list the source files in a given dir. You can limit the scope to a specific language withack -f --ruby
orack -f --type=ruby
. You can exclude dirs as well with--ignore-dir
.Use
ack --dump
to see the built-in file types for ack.