Исключение каталогов в Exuberant CTags
Я работаю с очень большой базой кода, и мне полезно выбирать, какие каталоги включены для использования с Exuberant Ctags.
Параметр --exclude
отлично работает, чтобы исключить отдельные имена файлов и каталогов (с помощью шаблонов globing), но я не могу понять, как заставить его исключать шаблоны путей, содержащие более одного каталога.
Например, я могу исключить каталог 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: <[email protected]>, http://ctags.sourceforge.net
Optional compiled features: +win32, +regex, +internal-sort
Ответы
Ответ 1
В какой-то момент может быть проще определить список файлов, которые вы хотите проиндексировать; сохраните этот список в файле и используйте ctags -L <filename>
для индексации только выбранных.
Это позволяет использовать find(1)
для обрезки каталогов, которые вы не хотите индексировать, например:
find . -path ./Documentation -prune -o -print > indexme
будет пропускать все файлы во всех подкаталогах ./Documentation
.
Ответ 2
ack -f | ctags -L -
ack
выведет список всех исходных файлов в указанном каталоге. Вы можете ограничить область заданного языка ack -f ruby
. Вы можете исключить и dirs вместе с ним --ignore-dir
.