2009-03-29 12 views
35

Al usar Vim, y dado un directorio lleno de código (por ejemplo, ~/trunk /) con varios subdirectorios, ¿hay alguna manera de grep/buscar instancias de texto/expresiones regulares en todo el código fuente?¿Cómo se busca todo el código fuente en Vim?

En el momento en que utilizo:

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

(Obviamente estoy limitar esto a los archivos de Python, lo cual es una cuestión diferente, pero es digno de mención que, idealmente, me gustaría limitar las búsquedas a los archivos con extensiones específicas)

Respuesta

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

Si usted tiene un gran proyecto bastante lo recomiendo a usted para utilizar cscope y vim plugins. Aquí hay uno diseñado para manejar grandes proyectos: SourceCodeObedience

Hay una breve descripción de cómo grep text utilizando SourceCodeObedience.

+0

¿Cuál? vimgrep o .sco? –

+0

vimgrep. No invertí el tiempo en SCO para que sea útil. –

+0

Esta es la "manera correcta" de hacer esto, porque este es el "modo vim". –

2

usted podría utilizar :vimgrep es decir:.

 :vimgrep /pattern/ **/*.py 

Marque esta Vim Tip:

También dé un vistazo a grep.vim, es un plugin que integra las grep, fgrep, egrep y herramientas agrep con Vim y le permite buscar un patrón en uno o más archivos y salto a ellos ...

6

Yo uso grep directamente para eso.

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

No funciona en mi windows gvim. – kroiz

5

Es posible que desee comprobar hacia fuera :vimgrep y :grep en la documentación de vim. :vimgrep usa la funcionalidad de búsqueda de patrones de vim y lee todos los archivos en los búfers de vim. :grep por defecto enlaces a un externo grep utlity en su sistema, pero puede cambiar el comportamiento estableciendo la opción grepprg. Aquí hay un enlace a los documentos en línea:

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

Hay más información sobre esto y también algunas otras opciones en la punta en "Buscar en archivos dentro de Vim" en el Vim Consejos Wiki:

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

0

Puede generar un índice de código fuente usando ctags y luego VIM puede use this para navegar sin problemas a través de su base de código. Su código fuente es consciente de que puede saltar directamente a declaraciones de métodos, etc.

Debe volver a generar los archivos ctags de vez en cuando, pero puede hacerlo como parte de su proceso de creación. Debería ser bastante rápido a menos que tu código base sea considerable.

+0

¿Cómo ayuda esto a encontrar la referencia de símbolo? –

+0

ctags indexará su código fuente (en la mayoría de los idiomas). VIM tiene la capacidad de navegar a través del índice de ctags, por lo que puede posicionarse sobre cualquier símbolo y luego saltar directamente a la definición. Ctrl +], creo. –

3

Conjunto grepprg a Ack, luego use :grep para buscar con Ack.

O use ctags.

Cuestiones relacionadas