2009-03-29 14 views
35

Quando si utilizza Vim e viene fornita una directory piena di codice (ad esempio ~/trunk /) con un numero di sottodirectory, esiste un modo per grep/cercare istanze di testo/regex attraverso l'intero codice sorgente?Come si cerca tutto il codice sorgente in Vim?

Al momento io uso:

:lcd ~/trunk 
:grep "pattern" *.py */*.py */*/*.py */*/*/*.py 

(Ovviamente sto limitando questo per i file Python, che è una questione diversa, ma è da notare che idealmente vorrei limitare le ricerche ai file con estensioni specifiche)

risposta

36
:vimgrep "pattern" ~/trunk/**/*.py 
:copen 20 

Se si dispone di un grande progetto del tutto vi consiglio a voi per usare cscope e vim plugins. Ecco uno progettato per gestire grandi progetti: SourceCodeObedience

C'è una breve descrizione di come grep text utilizzando SourceCodeObedience.

+0

Quale? vimgrep o .sco? –

+0

vimgrep. Non ho investito il tempo in SCO perché diventasse utile. –

+0

Questo è il "modo giusto" per farlo, perché questo è il "modo vim". –

2

Si potrebbe usare :vimgrep vale a dire:.

 :vimgrep /pattern/ **/*.py 

Scegli questa Tip Vim:

dare uno sguardo al grep.vim Inoltre, è un plugin che integra le grep, fgrep, egrep e strumenti agrep con Vim e permette di cercare un modello in uno o più file e saltare a loro ...

6

Io uso grep direttamente per quello.

grep -IirlZ "pattern" .|xargs -0 vim 

-I: ignore binary 
-i: ignore case 
-r: recursive 
-l: print file name only 
-Z: print \0 after each file name 
+0

Non funziona su Windows gvim. – kroiz

5

Si consiglia di controllare :vimgrep e :grep nella documentazione vim. :vimgrep utilizza la funzionalità di ricerca del modello di vim e legge tutti i file nei buffer vim. :grep per impostazione predefinita collegamenti a un esterno grep utlity sul sistema, ma è possibile modificare il comportamento impostando l'opzione grepprg. Ecco un link per la documentazione on-line:

http://vimdoc.sourceforge.net/htmldoc/quickfix.html#grep

C'è di più informazioni su questo e anche alcune altre opzioni nel suggerimento su "Trovi in ​​file all'interno Vim" presso il Vim Tips Wiki:

http://vim.wikia.com/wiki/Find_in_files_within_Vim

0

È possibile generare un indice del codice sorgente utilizzando ctags e quindi VIM può use this per navigare senza problemi attraverso il codice base. È in grado di accedere direttamente alle dichiarazioni dei metodi, ecc.

È necessario rigenerare i file ctags ogni tanto, ma è possibile farlo come parte del processo di creazione. Dovrebbe essere piuttosto veloce a meno che il tuo codice base sia considerevole.

+0

In che modo questo aiuta a trovare riferimenti ai simboli? –

+0

ctags indicizzerà il codice sorgente (nella maggior parte delle lingue). VIM ha la capacità di navigare attraverso l'indice ctags, così puoi posizionarti su qualunque simbolo e poi saltare direttamente alla definizione. Ctrl +], penso. –

3

Impostare grepprg a Ack, quindi utilizzare :grep per eseguire la ricerca con Ack.

Oppure utilizzare ctags.

Problemi correlati