Quando usar: grep e: vimgrep no vim?

16

No vim, :makeé fácil criar e corrigir erros :grepe :vimgrepse comportar assim :make. Mas por que você precisa desses dois comandos? Por que não procurar o padrão e pressionar n? Quais são as vantagens deles em relação apenas à pesquisa?

Qian
fonte

Respostas:

16

Como o doc diz:

Vim has two ways to find matches for a pattern: Internal and external.

Em poucas palavras, :vimgrepusa o mecanismo grep do Vim para ler e encontrar arquivos. :grepusa comandos externos para realizar o mesmo trabalho.

A /pesquisa é apenas para o buffer atual, enquanto :[vim]greppesquisa em um padrão de arquivos, permitindo pesquisar em um projeto inteiro de uma só vez.

Dê uma olhada :h greppara mais informações.

nobe4
fonte
4

/?busca apenas o buffer atual, mas :grepe :vimgreptomar arbitrárias arquivos / padrões / globs como argumentos.

romainl
fonte
4

Um benefício do :[vim]grepexcesso /?é 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 pathpara 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]grepcomando.

icc97
fonte
0

Existem três vantagens principais que eu vejo

  1. Use um regexmecanismo / sintaxe consistente : Usar :grep/vimgreppermite definir a grepprg, que pode ser definido para grep/ack/agetc. Com isso, é possível pesquisar no buffer atual ou em vários buffers / arquivos, usando um regexmecanismo 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 expressionsintaxe. 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 )

  2. O vimgrep preenche uma lista de correção rápida / localização : using :grep/vimgreppermite 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 ]qatalho para navegar se tiver o plugin Tim-Popes intacto ( https://github.com/tpope/vim-unimpaired )

  3. 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 greprgcorretamente 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 listou quickfix list.

[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/

alpha_989
fonte