2011-10-31 17 views
41

Supongamos que estoy buscando una clase JFactory dentro de una carpeta y sus subdirectorios.¿Cómo puedo buscar una palabra en todo el proyecto/carpeta recursivamente?

¿Cómo puedo archivar ese archivo que contiene class JFactory?

No quiero reemplazar esa palabra pero necesito encontrar ese archivo que contiene class JFactory.

+0

¿puedes usar grep? –

+5

Es mucho más conveniente no tener que abandonar su editor/IDE. –

Respuesta

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

Puede reemplazar el patrón /JFactory/ con /\<JFactory\>/ si quieres plena coincidencia de palabra. :vim es la abreviatura de :vimgrep.

Si JFactory o \<JFactory\> es su patrón de búsqueda actual (por ejemplo, usted ha golpeado * en una ocurrencia) se puede utilizar un patrón de búsqueda vacío: :vimgrep // **/*.java, utilizará la última patrón de búsqueda en su lugar. ¡Práctico!

Advertencia: :vimgrep activará autocmds si está habilitado. Esto puede ralentizar la búsqueda. Si no lo desea, puede hacerlo:

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

que será más rápido. Pero: no activará el resaltado de sintaxis o abrir archivos gz ungzipped, etc.

Tenga en cuenta que si quieres un programa externo a grep su patrón que puede hacer algo como lo siguiente:

:set grepprg=ack 
:grep --java JFactory 

Ack es una alternativa escrita a Perl para grep. Tenga en cuenta que, entonces, tendrá que cambiar a expresiones regulares de Perl.

Una vez que el comando de su elección haya regresado, puede navegar por los resultados de búsqueda con los comandos descritos en la documentación de Vim al :help quickfix. :cfirst de búsqueda, :cnext, :cprevious, :cnfile, etc.

2014 actualización: ahora hay nuevas maneras de hacer eso con the_silver_searcher o the_platinum_searcher y, o bien ag.vim o unite.vim plugins.

+7

Para la referencia: ': vim' es un nombre abreviado del comando': vimgrep'. –

+0

también tenga en cuenta que ': lvimgrep' hace lo mismo con la ventana de ubicación en lugar de la ventana de revisión. Es útil si también está tratando con la salida del compilador y no quiere ir y venir con ': cold ',': cnewer' todo el tiempo – sehe

+0

pero aún no puede obtener la lista de nombres de archivo que contiene la palabra "JFactory" ". – shibly

2

Eche un vistazo a ctags y cscope que le permiten saltar a las definiciones de clases y funciones, y encontrar dónde se usan esas funciones/clases.

12

En la carpeta raíz del proyecto, ejecute lo siguiente:

grep -H -r 'what_you_search' * | less 

Usted recibirá una lista de carpetas y las líneas que coincidan con esa cadena.

0

Abra la ventana de línea de comandos:

Esc - a enssure está en el modo normal

tipo q, escriba:

la línea de comandos debe abrir (como si fuera un archivo tmp para escribir el comando puede navegar como lo haría normalmente en cualquier archivo vim ...

tipo i para entrar en el modo de inserción

este ejemplo va a buscar la cadena to_srch recursiva bramar el directorio actual para todos los tipos de archivos de tipo 'Js' y ' .java' pero omiten todas las rutas de archivos que contienen la cadena node_modules

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

Ahora Wheen que: Copen se podía navegar con las teclas de flecha a través de los resultados sarch ...

también se puede establecer en los .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 

se podría omitir la primera: q/to_srch/Yo lo uso para resaltar los resultados de búsqueda de forma automática ya que he "set hlsearch" en mi ~/.vimrc

Cualquier indicio de cómo hacerlo habilitar automáticamente los resultados de srch de vimgrep o vimrc serán muy apreciados ...

Cuestiones relacionadas