Как исключить несколько каталогов с Exuberant ctags?

Я смотрел и пытался использовать обильные ctags без везения с тем, что я хочу сделать. Я на Mac пытаюсь работать в проекте, где я хочу исключить такие каталоги, как .git, node_modules, test и т. д. Когда я пытаюсь что-то вроде ctags -R --exclude=[.git, node_modules, test], я ничего не получаю взамен. Мне действительно нужно, чтобы он работал только в моем основном каталоге. Любые идеи о том, как это сделать?


person pertrai1    schedule 13.09.2014    source источник
comment
Возможный дубликат Исключение каталогов в Exuberant CTags   -  person Codie CodeMonkey    schedule 25.10.2017


Ответы (5)


Опция --exclude не ожидает списка файлов. Согласно справочной странице ctags, «эта опция может быть указана сколько угодно раз». Итак, это так:

ctags -R --exclude=.git --exclude=node_modules --exclude=test

person aalazz    schedule 13.09.2014
comment
Хорошо, это частично сработало. Поэтому мне не нужно задавать еще один вопрос и давать вам ответ на этот вопрос - есть ли способ включить только каталог и не делать исключения? Все, что мне нужно, это мой основной каталог - person pertrai1; 13.09.2014
comment
Я думаю, вы могли бы просто назвать каталог, который вы хотите, нет? Как ctags -R your_dir. Или я не понимаю, что вы имеете в виду. - person aalazz; 13.09.2014
comment
Да, когда я пытаюсь это сделать, он ничего не помечает из основного каталога. :-( - person pertrai1; 13.09.2014
comment
Вы также можете cd зайти на него и запустить ctags -R - person aalazz; 13.09.2014
comment
@pertrai1 сначала составьте список файлов, для которых вам нужны теги, а затем запустите ctags только для этого списка: find -name your-files -o -path your-path > list.txt; ctags -L list.txt - person m-ric; 31.05.2016
comment
Допустим, вы исключили node_modules, но хотите включить только один пакет из node_modules для отображения ctags. Возможно ли это? - person Seed; 01.06.2016
comment
Я не знаю, как это сделать за один проход, но вы можете ctags -R --exclude=node_modules, а затем ctags -Ra node_modules/my_package добавить теги в my_package к файлу тегов. - person aalazz; 01.06.2016
comment
Я пришел сюда, чтобы узнать, куда добавить эту информацию, я не вижу этого ни здесь, ни во фрагменте ниже. im в файле config.cson и вижу там пустой объект ctags, это то место, где эта информация подключается? Хорошо, нашел эту маленькую присоску, она находится в поле ввода File-›settings-›packages-Ctags-›settings CmdArgs. - person blamb; 29.08.2017
comment
Имейте в виду, я только что сломал ctags, добавив туда исключения, см. мой отчет об ошибке в atom/ctags. не уверен, как, но не могу больше использовать ctags, пока, по-видимому, не получу помощь автора. - person blamb; 29.08.2017

Чтениеэтогопрекрасногофантастического руководства должно всегда быть первым шагом любая попытка решить проблему.

От 1_:

--exclude=[pattern]
  Add  pattern to a list of excluded files and directories. This option may
  be specified as many times as desired. For each file name  considered  by
  both the complete path (e.g. some/path/base.ext) and the base name  (e.g.
  base.ext)  of  the  file, thus allowing patterns which match a given file
  name irrespective of its path, or match only a specific path.  If  appro-
  priate  support is available from the runtime library of your C compiler,
  then pattern may contain the usual shell wildcards (not  regular  expres-
  sions)  common  on Unix (be sure to quote the option parameter to protect
  the wildcards from being expanded by the shell  before  being  passed  to
  ctags;  also be aware that wildcards can match the slash character, '/').
  You can determine if shell wildcards are available on  your  platform  by
  examining  the output of the --version option, which will include "+wild-
  cards" in the  compiled  feature  list;  otherwise,  pattern  is  matched
  against file names using a simple textual comparison.

  If  pattern begins with the character '@', then the rest of the string is
  interpreted as a file name from which to read exclusion patterns, one per
  line.  If  pattern  is  empty,  the list of excluded patterns is cleared.
  Note that at program startup, the default exclude list contains "EIFGEN",
  "SCCS",  "RCS", and "CVS", which are names of directories for which it is
  generally not desirable to descend while processing the --recurse option.

Из двух первых предложений получается:

$ ctags -R --exclude=dir1 --exclude=dir2 --exclude=dir3 .

это может быть немного многословно, но для этого и нужны псевдонимы, сопоставления и т. д. В качестве альтернативы вы получаете это из второго абзаца:

$ ctags -R [email protected] .

со следующим в .ctagsignore:

dir1
dir2
dir3

что позволяет исключить эти 3 каталога без особого набора текста.

person romainl    schedule 13.09.2014
comment
Хм. проголосовал за удобный ответ, но думаю, это делает меня плохим человеком, поскольку я должен был использовать RTFM вместо того, чтобы приходить сюда! - person artfulrobot; 15.04.2015
comment
Мой любимый способ RTFM — гуглить и надеяться, что кто-нибудь на SO объяснит мне TFM. Спасибо! - person Subtlebot; 19.03.2018
comment
Я понимаю, что это старая ветка и ответ, но @ т.е. [email protected] не работает (на самом деле работает, см. мое редактирование) РЕДАКТИРОВАТЬ: классическое решение с резиновой уткой... убедитесь, что в файле игнорирования нет каталогов, которые заканчиваться на / - person Samaursa; 30.03.2018
comment
Спасибо за ответ. ИМХО, все изменилось, и теперь более эффективно выполнить быстрый поиск в Интернете для конкретного решения, а затем RTFM, если вы не найдете его таким образом. - person Tanausú González; 02.10.2019

Вы можете инкапсулировать список, разделенный запятыми, с помощью фигурных скобок для обработки кратных значений с помощью одной опции --exclude:

ctags -R --exclude={folder1,folder2,folder3}

Похоже, это работает только для папок в корне, где вы вводите команду. Для исключения вложенных папок требуется отдельная опция --exclude.

person voodooGQ    schedule 13.03.2017
comment
Изящное использование распорки оболочки! - person Tom Hale; 20.10.2017

Другие ответы были прямо в точку, и я подумал, что небольшой пример может помочь:

Вы должны добавить unix-подобный стиль звездочки, чтобы исключить весь каталог.

ctags -R --exclude={.git/*,.env/*,.idea/*} ./

person TheRealDealidols    schedule 20.04.2020

Мне действительно нужно, чтобы он работал только в моем основном каталоге.

Просто удалите флаг -R (рекурсия)!!!

person S Narum    schedule 08.02.2021
comment
Предполагая, что основной каталог не имеет подкаталогов? - person Suraj Rao; 08.02.2021