2011-10-31 10 views
41

Supponiamo che sto cercando una classe JFactory all'interno di una cartella e le sue sottodirectory.Come posso cercare una parola in tutto il progetto/cartella ricorsivamente?

Come posso archiviare quel file che contiene class JFactory?

Non voglio sostituire quella parola, ma ho bisogno di trovare quel file che contiene class JFactory.

+0

è possibile utilizzare invece grep? –

+5

È molto più comodo non dover lasciare il tuo editor/IDE. –

risposta

62
:vimgrep /JFactory/ **/*.java 

È possibile sostituire il modello /JFactory/ con /\<JFactory\>/ se si desidera partita piena di parola. :vim è una scorciatoia per :vimgrep.

Se JFactory o \<JFactory\> è la tua attuale modello di ricerca (ad esempio, si hanno colpito * su un'occorrenza) è possibile utilizzare un modello di ricerca vuoto: :vimgrep // **/*.java, utilizzerà invece ultimo modello di ricerca. Maneggevole!

Avvertenza: :vimgrep attiverà l'autocmds se abilitato. Questo può rallentare la ricerca. Se non vuoi che tu possa fare:

:noautocmd vimgrep /\<JFactory\>/ **/*.java 

che sarà più veloce. Ma: non si innescherà l'evidenziazione della sintassi o aperti gz file ungzipped, ecc

Si noti che se si desidera un programma esterno per grep vostro modello si può fare qualcosa di simile al seguente:

:set grepprg=ack 
:grep --java JFactory 

Ack è un'alternativa scritta da Perl a grep. Si noti che, quindi, sarà necessario passare a espressioni regolari Perl.

Una volta restituito il comando di propria scelta, è possibile sfogliare i risultati della ricerca con i comandi descritti nella documentazione di Vim allo :help quickfix. Lookup :cfirst, :cnext, :cprevious, :cnfile, ecc

2014 aggiornamento: ora ci sono nuovi modi di fare che con the_silver_searcher o the_platinum_searcher e sia ag.vim o unite.vim plugin.

+7

Per il riferimento: ': vim' è un nome breve del comando': vimgrep'. –

+0

notate anche che ': lvimgrep' fa lo stesso con la finestra di posizione invece della finestra di aggiornamento rapido. Pratico se hai a che fare anche con l'output del compilatore e non vuoi andare avanti e indietro con ': colder',': cnewer' per tutto il tempo – sehe

+0

ma non riesci ancora a ottenere l'elenco del nome file che contiene la parola "JFactory" ". – shibly

2

Dai uno sguardo a ctags e cscope che ti consentono di passare alle definizioni di classi e funzioni e trovare dove vengono utilizzate tali funzioni/classi.

12

Dalla cartella radice del progetto, eseguire seguente:

grep -H -r 'what_you_search' * | less 

Si otterrà un elenco delle cartelle e le linee corrispondenti con quella stringa.

0

Aprire la finestra della riga di comando:

Esc - a enssure ci si trova in modalità Normale

digitare q Tipo:

la linea di comando dovrebbe aprire (come un file di tmp di scrivere il comando che puoi navigare mentre navigherai normalmente in qualsiasi file Vim ...

di tipo I per entrare in modalità inserimento

questo esempio cercare la stringa to_srch ricorsivamente Bramito directory corrente per tutti i tipi di file di tipo '.js' e ' .java' ma omettere tutti i percorsi di file che contengono la stringa node_modules

:g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'` 

Ora wheen voi: Copen è possibile navigare con i tasti freccia attraverso i risultati Sarch ...

si potrebbe anche impostare quelle in Vimrc

" how-to search recursively under the current dir for the files of type js and java but omit the 
    " node_modules file paths 
    ":g/console.log/ | :vimgrep /console.log/ `find . -type f -name '*.js' -o -name '*.java' -not -path '*node_modules/*'` 
    " reminder open the quick fix window by :copen 20 
    " reminder close the quick fix window by :ccl 

si potrebbe omettere il primo: q/to_srch/Io lo uso per evidenziare i risultati di ricerca automaticamente dal momento che ho "hlsearch set" nel mio ~/.vimrc

Qualsiasi suggerimento how-to attivare automaticamente i risultati dello srch di vimgrep o di vimrc saranno molto apprezzati ...

Problemi correlati