Respostas:
Como o doc diz:
Vim has two ways to find matches for a pattern: Internal and external.
Em poucas palavras, :vimgrep
usa o mecanismo grep do Vim para ler e encontrar arquivos. :grep
usa comandos externos para realizar o mesmo trabalho.
A /
pesquisa é apenas para o buffer atual, enquanto :[vim]grep
pesquisa em um padrão de arquivos, permitindo pesquisar em um projeto inteiro de uma só vez.
Dê uma olhada :h grep
para mais informações.
Um benefício do :[vim]grep
excesso /?
é que os resultados são colocados na lista de correções rápidas (ou lista de locais, se você usar :l[vim]grep
), isso significa que você pode criar uma lista de todas as correspondências usando :cl
. Você pode usar um número para ir diretamente para o resultado desejado da lista.
Isso também significa que você pode usar o mesmo comando para pesquisar o buffer atual :[vim]grep pattern %
e para pesquisar toda a sua base de código, :[vim]grep pattern path
para que haja uma simetria agradável.
Além disso, você pode ramificar e usar o Silver Surfer / Ripgrep para oferecer uma pesquisa muito poderosa. Estes podem ser mapeados para o :[vim]grep
comando.
Existem três vantagens principais que eu vejo
Use um regex
mecanismo / sintaxe consistente : Usar :grep/vimgrep
permite definir a grepprg
, que pode ser definido para grep/ack/ag
etc. Com isso, é possível pesquisar no buffer atual ou em vários buffers / arquivos, usando um regex
mecanismo consistente . Por outro lado, se você usar a/pattern
opção vim, ficará preso no mecanismo de regex padrão do vim, que possui uma sintaxe diferente em comparação à extended regular expression
sintaxe. Portanto, sempre que você precisar procurar uma expressão, terá que pensar / lembrar se deve usar \)
ou apenas )
outras diferenças. Isso pode ser muito irritante ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )
O vimgrep preenche uma lista de correção rápida / localização : using :grep/vimgrep
permite que você preencha uma lista de pesquisa. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Se você quiser usar a lista de locais, poderá usar o ]q
atalho para navegar se tiver o plugin Tim-Popes intacto ( https://github.com/tpope/vim-unimpaired )
pesquisas complicadas no vim : normalmente, se você precisar fazer pesquisas complicadas, talvez seja necessário usar a linha de comando. No entanto, se você definir greprg
corretamente e usar um comando como [1]
: vim / pattern1 / find . -type f
Você pode fazer pesquisas muito complicadas e exibir os resultados da pesquisa no seu location list
ou quickfix list
.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/