2009-02-04 6 views

Respuesta

3
" put in your ~/.vimrc file 
    " START search related configs and helps 
    " 
    " ignore case when searching 
    set ignorecase 

    " search as characters are entered, as you type in more characters, the search is refined 
    set incsearch 

    " highlight matches, in normal mode try typing * or even g* when cursor on string 
    set hlsearch 

    " yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline 
    " how-to search for a string recursively 
    " :grep! "\<doLogErrorMsg\>" . -r 
    " 
    " how-to search recursively , omit log and git files 
    " :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log` 
    " :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'` 
    " 
    " how-to search for the "srch" from the current dir recursively in the shell 
    " vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`' 
    " 
    " how-to highlight the after the search the searchable string 
    " in normmal mode press g* when the cursor is on a matched string 

    " how-to jump between the search matches - open the quick fix window by 
    " :copen 22 

    " how-to to close the quick fix window 
    " :ccl 

    " F5 will find the next occurrence after vimgrep 
    map <F5> :cp!<CR> 

    " F6 will find the previous occurrence after vimgrep 
    map <F6> :cn!<CR> 

    " F8 search for word under the cursor recursively , :copen , to close -> :ccl 
    nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR> 

    " omit a dir from all searches to perform globally 
    set wildignore+=**/node_modules/** 

    " use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/ 
    noremap//\v 
    " 
    " STOP search related configs and helps 
+1

me gusta mucho su F5- F8 ideas. Sería bueno tener algunas visualizaciones/salidas de esos comandos aquí. ¿Cómo está diseñado F8 para funcionar? ¿Busca solo el directorio actual? - - La omisión de un directorio es una costumbre - ¿por qué 'node_modules'? - - ¿Cómo las expresiones regulares perl cambian el funcionamiento predeterminado de Vim? - - La siguiente es la forma en que he diseñado mi búsqueda de archivos .tex https://askubuntu.com/a/789769/25388 Sería bueno aprender de usted cómo mejorarlo. No es tan intuitivo, así que también olvidé la lógica con frecuencia. –

+0

node_modules es el directorio que contiene una gran cantidad de código js de los módulos npm si usted desarrolla front-ends ... es solo un ejemplo ... –

+1

haga una copia de seguridad de usted .vimrc y agregue esa configuración, cárguela con: así que% y luego intenta ejecutar las "ayudas" en los comandos ... vim es difícil - tendrías que repetir esos miles de veces, pero una vez que los domines te reirás @todo el que apunte sus nuevas características IDE UI. .. –

10

El uso de :set hlsearch resaltará todas las coincidencias en amarillo, lo que le permite escanear el archivo fácilmente en busca de coincidencias. Eso no puede ser lo que quiere, sin embargo, después de buscar,: // g p le dará el listado partidos

+2

debe ser ': conjunto hlsearch' no ': hlsearch'. –

+0

Es útil también mapear ': nohl' para borrar los aspectos más destacados cuando ya no los necesite. – Kos

178
:g//p 

En su forma más larga:

:global/regular-expression/print 

Usted puede dejar de lado el patrón/expresiones regulares y Vim reutilizará el término de búsqueda anterior.

Trivia: La herramienta grep fue nombrada después de esta secuencia de comandos.

+65

+1 para trivia impresionante !!! – manifest

+14

': g //' - ya que p (rint) es la acción predeterminada, puede dejar eso también. – dekeguard

+3

': g /' es aún más corto! – Sparhawk

8

Para más detalles sobre esto ... en lugar de

/example 
:g//p 

también se puede escribir directamente

:g/example/p 

o, como p (rint) es la acción por defecto para el: g (lobular) comando, esto se puede acortar a

:g/example 

Y en lugar de p (rint), otras acciones son posibles, por ejemplo borrar). Véase: Ayuda: mundial

42

También se puede hacer un:

g/pattern/#

que imprimirá el patrón que desea y el número de la línea.

+2

+1 para los números de línea. – iamnotmaynard

+0

Agradable.Pero si ya tiene habilitados los números de línea, entonces '#' no es obligatorio. ¡Muestra los números de línea por defecto –

38

si desea buscar en esta lista y saltar rápidamente entre los partidos, considerar el uso de

:vimgrep example %

o

:grep example %

Esto poblar la "lista de errores" con todo de las coincidencias para que pueda usar :copen para enumerarlas todas en el búfer de solución rápida, presione enter en una línea particular para saltar a esa coincidencia, o use comandos como :cn y :cp para ir y venir.

para una explicación detallada, ver my reply to a similar question

+3

+1 para la capacidad de navegar por los resultados de búsqueda! –

12

Otra posibilidad es utilizar el incluir comandos de búsqueda de archivos.

[I 

Esto listará todas las apariciones de la palabra debajo del cursor. Sin embargo, puede ser más de lo que necesita, porque también buscará cualquier archivo que esté incluido en el archivo actual.

Pero lo bueno de este comando es que la pantalla de resultados de búsqueda también muestra un recuento del número de coincidencias, además del número de línea de cada coincidencia.

:help include-search 

para ver muchas variantes.

Una nota sobre

:g//p 

Esto se puede reducir adicionalmente para

:g// 

porque, como otros han dicho, p (rint) es la acción por defecto.

+0

¿Es posible obtener el resultado de '[I' con contexto, como en grep' --context 9'? –

23

Acabo de aprender una nueva: ¡Location List!
Escriba :lvim foo % para buscar foo en el archivo actual e introduzca todas las coincidencias que contengan foo en la lista de ubicaciones .
Escriba :lopen para abrir la lista de ubicaciones en la ventana de revisión, que es completamente navegable como de costumbre.
Uso :lnext/:lprevious a TO a través de la lista (uso tpope/irreprochable asignaciones para la mejor experiencia)

+0

¿existe una configuración para tener: lopen hecho de forma predeterminada? – lkraav

+1

Buen consejo! Esto me llevó a hacer esta asignación que se expande automáticamente la palabra bajo el cursor y que LOPEN en un barrido: nnoremap f: lvim/ = ampliar ("") /% : LOPEN

4
g/pattern 

Si tiene :set number, los números de línea de comandos muestra arriba también.

Si no ha :set number, entonces

g/pattern/# 

mostrará los números de línea.

2

se puede obtener un buen quickfix ventana con los partidos forman el patrón de búsqueda actual

:vim // % 
:copen 

súper práctico si previamente creado un patrón de búsqueda compleja utilizando sólo /pattern

Editar: acabo de enterar esto también funciona para todos los búferes abiertos

:bufdo vimgrepadd // % 
:copen 
0

Ctrl-F a la lista de resultados de búsqueda de todo:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter> 
Cuestiones relacionadas