Risposte:
Come dice il documento:
Vim has two ways to find matches for a pattern: Internal and external.
In poche parole, :vimgrep
utilizza il meccanismo grep di Vim per leggere e trovare nei file. :grep
utilizza comandi esterni per ottenere lo stesso lavoro.
La /
ricerca è solo per il buffer corrente, mentre :[vim]grep
cerca attraverso un modello di file, che consente di cercare in un intero progetto contemporaneamente.
Dai un'occhiata a :h grep
per maggiori informazioni.
Uno dei vantaggi di :[vim]grep
over /?
è che i risultati vengono inseriti nell'elenco delle correzioni rapide (o nell'elenco delle posizioni se si utilizza :l[vim]grep
), ciò significa che è possibile estrarre un elenco di tutte le corrispondenze utilizzando :cl
. È quindi possibile utilizzare un numero per passare direttamente al risultato desiderato dall'elenco.
Significa anche che è possibile utilizzare lo stesso comando per la ricerca nel buffer corrente :[vim]grep pattern %
come per la ricerca dell'intera base di codice in :[vim]grep pattern path
modo che ci sia una bella simmetria.
Inoltre, puoi ramificarti e utilizzare Silver Surfer / Ripgrep per darti una ricerca molto potente. Questi possono essere associati al :[vim]grep
comando.
Ci sono 3 vantaggi principali che vedo
Usa un regex
motore / sintassi coerente : usando :grep/vimgrep
puoi definire un grepprg
, che può essere definito in grep/ack/ag
ecc. Usando questo puoi cercare il buffer corrente o più buffer / file, usando un regex
motore coerente . D'altra parte, se usi l'/pattern
opzione di vim , sei bloccato sul motore regex predefinito di vim, che ha una sintassi diversa rispetto alla extended regular expression
sintassi. Quindi, ogni volta che devi cercare un'espressione, dovrai pensare / ricordare se dovresti usare \)
o solo )
e altre differenze. Questo può essere molto fastidioso ( /programming/3864467/whats-the-difference-b Between- vim- regex- and- normal- regex )
vimgrep popola un elenco di correzioni rapide / posizione : l'utilizzo :grep/vimgrep
consente di popolare un elenco di ricerca. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Se si desidera utilizzare l'elenco delle posizioni, è possibile utilizzare il ]q
collegamento per spostarsi se si dispone di un plug-in non danneggiato di Tim-Popes ( https://github.com/tpope/vim-unimpaired )
ricerche complicate all'interno di vim : in genere se devi fare ricerche complicate potresti dover usare la riga di comando. Tuttavia, se si definisce greprg
correttamente e si utilizza un comando come [1]
: vim / pattern1 / find . -type f
Puoi eseguire ricerche molto complicate e visualizzare i risultati della ricerca nel tuo location list
o quickfix list
.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/