2011-10-24 10 views
46

Soy nuevo en vim y sigo explorando algunas características de él. Tengo un problema con vimgrep. Puedo buscar un patrón como este vimgrep /define/ ** para que encuentre y abra el siguiente archivo que contiene un define. Pero aún no pude encontrar la forma de ir al próximo archivo/línea que coincida con mi patrón. ¿Alguna sugerencia?Cómo pasar de un patrón a otro cuando se usa: vimgrep (lista de Quickfix)?

Respuesta

71

Comandos útiles para la lista quickfix (entre corchetes parte omitirse de los comandos):

  • :cn[ext] y :cp[revious] salto a la entrada siguiente y anterior
  • :cnf[ile] y :cpf[ile] salto al archivo siguiente y anterior (si la lista de arreglos rápidos no está ordenada por archivo, puede write a function that getqflist(), performs a sort and then setqflist()
  • :cr[ewind] y :cla[st] ir al principio o al final de la lista de arreglos
  • :col[der] y :cnew[er] iterarán a través de listas históricas de soluciones rápidas.

No hace falta decir que hay muchos otros comandos y puede encontrarlos en :help quickfix.

Personalmente tengo los siguientes mapas:

 | ø  | SHIFT | CTRL 
------+--------+---------+--------- 
<F11> | :cprev | :cpfile | :colder 
<F12> | :cnext | :cnfile | :cnewer 

Por supuesto, si se utiliza la lista de ubicaciones en lugar de la lista quickfix (:lvimgrep) existen los mismos comandos, basta con sustituir la inicial c con un l y eso es todo .

Vim 8 Adiciones:

  • :cdo: ejecutar un comando en todas las entradas de la lista quickfix. Por ejemplo
    :vim /foo/ *.cpp *.h *.hpp puede ir seguido de
    :cdo s/pattern/replacement/g
  • :cfdo: ejecutar un comando de una lista de todos los archivos en quickfix. Por ejemplo,
    :vim /foo/ *.cpp *.h *.hpp puede ir seguido de
    :cfdo %s/2ndpattern/2ndreplacement/g
+7

El popular complemento [unimpaired.vim] (http://www.vim.org/scripts/script.php?script_id=1590) mapea ': cprev' y': cnext' a '[q' y'] q' . Toma muy poco tiempo para acostumbrarse. – glts

+0

También asigna '[' y '] ' a ': cpfile' y': cnfile'. –

+0

N.B. Esto no se debe confundir con ': cNext', que es lo que viene primero para mí si escribo': cn' y luego presiono tab. El problema es que acaba de obtener un error de 'No más artículos', porque como la respuesta de @RandyMorris 'señala ': cNext' va en reversa. Solo asumí que algo estaba mal. – icc97

8

Para pasar a la siguiente aparición del patrón, puede usar :cnext. Puede ir en reversa con :cNext.

no estoy seguro de una forma de omitir todas las apariciones hasta el siguiente archivo de forma automática, pero se podía abrir la ventana quickfix con :cwindow para ver una lista de coincidencias y vaya a esos partidos por golpear Introduzca en la entrada en la lista.

+5

': cnfile' es lo que quiere! – Benoit

+1

@Benoit: ponlo en su propia respuesta –

+0

@Nathan Fellman: hecho. – Benoit

Cuestiones relacionadas