Al usar grep desde VIM, ¿cómo saltar a los resultados?

32

Cuando uso el complemento grep para VIM, puedo buscar en el directorio actual todas las apariciones de una cadena dentro de un conjunto de archivos, como este:

:grep Ryan *.txt

Esto genera algo como esto:

file1.txt:3:Ryan was here
file2.txt:10:Ryan likes VIM
file3.txt:5:superuser.com is a fav of Ryan
(1 of 3): Ryan was here
Press ENTER or type command to continue

Si presiono enter, solo me lleva de vuelta a mi editor. Lo que realmente quiero hacer es poder abrir uno de esos archivos y saltar al lugar donde se encontró la cadena. ¿Hay alguna forma de hacer esto? La 1 of 3parte me hace pensar que hay una forma de tabular los resultados, pero no sé qué comandos están disponibles para mí. ¿Alguien puede arrojar algo de luz sobre esto?

Marplesoft
fuente

Respuestas:

34

Cuando presiona ENTRAR, debería estar mirando la línea 3 del archivo1.txt. Para saltar al siguiente partido, ejecuta :cn; para saltar al partido anterior, ejecutar :cp. La ejecución :copenabrirá una ventana que contiene la lista de coincidencias. Mueva el cursor a la coincidencia deseada y presione ENTER para saltar a esa coincidencia.

Para más información sobre el uso :grep, vea

:help grep
:help quickfix.txt

Escribir :cny :cpavanzar y retroceder en la lista de soluciones rápidas puede ser incómodo, por lo que utilizo estas asignaciones:

nmap <silent> <C-N> :cn<CR>zv
nmap <silent> <C-P> :cp<CR>zv

Además, el :grepcomando no es un complemento; Es parte de Vim.

garyjohn
fuente
Gran respuesta, gracias! Por cierto, ¿puedes hacer una búsqueda recursiva a través de carpetas con vim grep?
Marplesoft
Mientras esté ejecutando en un sistema Unix, puede agregar cualquier argumento a Vim :grepque agregaría a un grepcomando ejecutado desde el shell. Por lo tanto, puede hacer una búsqueda recursiva a través de todos los archivos .txt en y debajo del directorio actual con :grep -R --include=*.txt Ryan .. También puede realizar una búsqueda recursiva utilizando el :vimgrepcomando de Vim , pero los argumentos son diferentes y rara vez lo uso porque es más lento que :grep.
garyjohn