:grep/ :vimgrepambos usam a lista de correções rápidas para armazenar locais. Como você notou, o vim passará automaticamente para a primeira ocorrência (use !para evitar esse comportamento). Basta usar :cnextpara ir para o próximo local na lista de correções rápidas.
Comandos Quickfix
:cnext/ :cpreviouspara navegar para a frente e para trás na correção rápida na lista de correções rápidas
:cfirst/ :clastpara ir para o início e o fim da lista de correções rápidas
- Use
:copenpara abrir a janela do quickfix. Use <cr>para pular para uma entrada
- Use
:cclosepara fechar a janela do quickfix
- Use
:ccpara exibir o erro atual.
:colder/ :cnewerpara pular listas de correções rápidas mais antigas / mais recentes
Eu recomendo que você crie mapeamentos para :cnexte :cprevious. Eu pessoalmente uso unimpaired.vim, que fornece ]q& [qmapeamentos para :cnexte :cprevious.
Se você deseja que a janela do quickfix seja aberta automaticamente, coloque o seguinte em vimrc:
augroup autoquickfix
autocmd!
autocmd QuickFixCmdPost [^l]* cwindow
autocmd QuickFixCmdPost l* lwindow
augroup END
Há um episódio do Vimcasts sobre este tópico: Pesquise vários arquivos com: vimgrep .
Pesquisa e substituição em todo o projeto
Se você estiver usando :grep/ :vimgrepcomo maneira de fazer uma pesquisa e substituir todo o projeto , sugiro que você use :cdo/ :cfdo(no Vim 7.4.980+).
:grep 'foo'
:cfdo %s/foo/bar/g|w
Se sua versão do Vim não possui :cdo/ :cfdocoloca os seguintes comandos em seu vimrcarquivo para fornecer :Cdo/ :Cfdocomandos alternativos.
if !exists(':cdo')
command! -nargs=1 -complete=command Cdo try | sil cfirst |
\ while 1 | exec <q-args> | sil cn | endwhile |
\ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
\ endtry
command! -nargs=1 -complete=command Cfdo try | sil cfirst |
\ while 1 | exec <q-args> | sil cnf | endwhile |
\ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
\ endtry
endif
Usando um programa alternativo para :grep
Às vezes, grepnão é bom o suficiente para suas necessidades de pesquisa. Você pode alterar seu :grepprograma através da 'grepprg'configuração (também pode ser necessário alterar 'grepformat'). Pessoalmente, uso o ripgrep adicionando o seguinte ao meu vimrcarquivo, conforme instruído na rgpágina do manual:
set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m
Nota: Pode querer usar -Ssinalizador, por exemplo set grepprg=rg\ -S\ --vimgrep, para usar a pesquisa "caso inteligente" (pesquisa sem distinção entre maiúsculas e minúsculas quando todas as letras minúsculas).
Agora :grepusará rgpara pesquisar. por exemplo :grep foo -t js.
Aqui estão alguns programas grep alternativos para examinar: ack , ag , ripgrep e git grep( Fugitive.vim fornece :Ggrepwrapper)
Para obter mais ajuda, consulte:
:h :grep
:h 'grepprg'
:h quickfix
:h :cnext
:h :copen
:h :ccl
:h :cc
:h :colder
:h :cdo
:h :cfdo