Excluding directories in Exuberant CTags

Codie CodeMonkey picture Codie CodeMonkey · Nov 19, 2011 · Viewed 11k times · Source

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: <[email protected]>, http://ctags.sourceforge.net
  Optional compiled features: +win32, +regex, +internal-sort

Answer

sarnold picture sarnold · Nov 19, 2011

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.:

find . -path ./Documentation -prune -o -print > indexme

would skip all the files in all subdirectories of ./Documentation.