I have looked and tried to use exuberant ctags with no luck with what I want to do. I am on a Mac trying to work in a project where I want to exclude such directories as .git, node_modules, test, etc. When I try something like ctags -R --exclude=[.git, node_modules, test]
I get nothing in return. I really only need to have it run in my core directory. Any ideas on how to accomplish this?
The --exclude
option does not expect a list of files. According to ctags
's man page, "This option may be specified as many times as desired." So, it's like this:
ctags -R --exclude=.git --exclude=node_modules --exclude=test
ctags -R your_dir
. Or I don't understand what you mean. –
Dichogamy cd
to it and run ctags -R
–
Dichogamy find -name your-files -o -path your-path > list.txt; ctags -L list.txt
–
Kalliekallista ctags -R --exclude=node_modules
and then ctags -Ra node_modules/my_package
to append the tags in my_package
to the tag file. –
Dichogamy CmdArgs
input box. –
Alicealicea Read The Fantastic Manual should always be the first step of any attempt to solve a problem.
From $ man ctags
:
--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.
From the two first sentences you get:
$ ctags -R --exclude=dir1 --exclude=dir2 --exclude=dir3 .
which may be a bit verbose but that's what aliases and mappings and so on are for. As an alternative, you get this from the second paragraph:
$ ctags -R [email protected] .
with the following in .ctagsignore
:
dir1
dir2
dir3
which works out to excluding those 3 directories without as much typing.
@
i.e. [email protected]
doesn't work (actually, it does, see my edit) EDIT: Classic rubber duck solution... make sure that the ignore file doesn't have directories that end with /
–
Nuri You can encapsulate a comma separated list with curly braces to handle multiples with one --exclude
option:
ctags -R --exclude={folder1,folder2,folder3}
This appears to only work for folders in the root of where you're issuing the command. Excluding nested folders requires a separate --exclude
option.
The other answers were straight to the point, and I thought a little example may help:
You should add an asterisk unix-like style to exclude the whole directory.
ctags -R --exclude={.git/*,.env/*,.idea/*} ./
A bit late but following on romainl response, you could use your .gitignore file as a basis, you only need to remove any leading slashes from the file, like so:
sed "s/\///" .gitignore > .ctagsignore
ctags -R [email protected]
I really only need to have it run in my core directory.
Simply remove the -R (recursion) flag!!!
© 2022 - 2024 — McMap. All rights reserved.