Ao usar o grep do VIM, como ir para os resultados?

32

Ao usar o plug-in grep no VIM, posso procurar no diretório atual todas as ocorrências de uma string em um conjunto de arquivos, como este:

:grep Ryan *.txt

Isso gera algo como isto:

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

Se eu pressionar enter, isso me levará de volta ao meu editor. O que eu realmente quero fazer é poder abrir um desses arquivos e pular para o local onde a string foi encontrada. Existe uma maneira de fazer isso? A 1 of 3parte me faz pensar que há uma maneira de analisar os resultados, mas não sei quais comandos estão disponíveis para mim. Alguem pode iluminar isso?

Marplesoft
fonte

Respostas:

34

Ao pressionar ENTER, você deve observar a linha 3 do arquivo1.txt. Para pular para a próxima partida, execute :cn; para pular para a partida anterior, execute :cp. A execução :copenabrirá uma janela contendo a lista de correspondências. Mova o cursor para a correspondência desejada e pressione ENTER para pular para essa correspondência.

Para mais informações sobre o uso :grep, consulte

:help grep
:help quickfix.txt

Digitar :cne :cpavançar e retroceder na lista de correções rápidas pode ser complicado, então eu uso esses mapeamentos:

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

Além disso, o :grepcomando não é um plug-in; faz parte do Vim.

garyjohn
fonte
Ótima resposta, obrigado! BTW, você pode fazer uma pesquisa recursiva através de pastas com o vim grep?
Marplesoft 22/02
Enquanto você estiver rodando em um sistema Unix, poderá adicionar quaisquer argumentos ao Vim :grepque você adicionaria a um grepcomando executado a partir do shell. Portanto, você pode fazer uma pesquisa recursiva em todos os arquivos .txt dentro e abaixo do diretório atual com :grep -R --include=*.txt Ryan .. Você também pode executar uma pesquisa recursiva usando o :vimgrepcomando do Vim , mas os argumentos são diferentes e raramente uso porque é mais lento que :grep.
garyjohn