2014-09-13 12 views
28

Ho cercato e ho provato a usare esuberanti ctags senza fortuna con quello che voglio fare. Sono su un Mac che tenta di lavorare in un progetto in cui voglio escludere directory come .git, node_modules, test, ecc. Quando provo qualcosa come ctags -R --exclude=[.git, node_modules, test] non ottengo nulla in cambio. Ho solo bisogno di farlo funzionare nella mia directory principale. Qualche idea su come realizzare questo?Come escludere più directory con ctag esuberanti?

+0

Possibile duplicato di [Esclusione di directory in CT esuberante] (https://stackoverflow.com/questions/8193178/excluding-directories-in-exuberant-ctags) –

risposta

41

L'opzione --exclude non prevede un elenco di file. In base alla pagina man di ctags, "Questa opzione può essere specificata tutte le volte che si desidera." Quindi, è come questo:

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

+0

Ok, questo ha funzionato parzialmente. Quindi non devo fare un'altra domanda e darti la risposta per questo - c'è un modo per includere solo una directory e non dover fare l'esclusione? Tutto ciò di cui ho bisogno è la mia directory principale – pertrai1

+0

Penso che potresti semplicemente nominare la directory che vuoi, no? Mi piace 'ctags -R your_dir'. O non capisco cosa intendi. – aalazz

+0

Sì, quando provo questo non codifica nulla dalla directory principale. :-( – pertrai1

23

R ead T ha F antastic M anuale dovrebbe sempre essere il primo passo di qualsiasi tentativo di risolvere un problema.

Da $ 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. 

Dai due prime frasi si ottiene:

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

che può essere un po 'prolisso, ma questo è ciò che gli alias e le mappature e così via sono per. In alternativa, si ottiene questo, secondo comma:

$ ctags -R [email protected] . 

i seguenti nella .ctagsignore:

dir1 
dir2 
dir3 

che funziona a esclusione delle 3 directory senza tanto di battitura.

+3

Hmmm. upvoted come risposta pratica, ma indovina che mi rende una persona cattiva come dovrei avere RTFM invece di venire qui! – artfulrobot

2

È possibile incapsulare un elenco separato da virgola con parentesi graffe di gestire multipli con una sola opzione --exclude:

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

Questo sembra funzionare solo per le cartelle nella radice di cui si sta eseguendo il comando. L'esclusione delle cartelle nidificate richiede un'opzione separata --exclude.

+0

Nifty use of shell brace expansion! –

Problemi correlati