Respuestas:
Como dice el documento:
Vim has two ways to find matches for a pattern: Internal and external.
En pocas palabras, :vimgrep
utiliza el mecanismo grep de Vim para leer y buscar archivos. :grep
usa comandos externos para lograr el mismo trabajo.
La /
búsqueda es solo para el búfer actual, mientras que :[vim]grep
busca a través de un patrón de archivos, lo que le permite buscar en un proyecto completo a la vez.
Echa un vistazo :h grep
para más información.
Una de las ventajas de :[vim]grep
over /?
es que los resultados se colocan en la lista de soluciones rápidas (o en la lista de ubicaciones si la usa :l[vim]grep
), esto significa que puede obtener una lista de todas las coincidencias usando :cl
. Luego puede usar un número para ir directamente al resultado que desea de la lista.
También significa que puede usar el mismo comando para buscar en el búfer actual :[vim]grep pattern %
que para buscar en toda la base de código, :[vim]grep pattern path
por lo que tiene una buena simetría.
Además de esto, puede ramificarse y usar Silver Surfer / Ripgrep para brindarle una búsqueda muy poderosa. Estos se pueden asignar al :[vim]grep
comando.
Hay 3 ventajas principales que veo
Utilice un regex
motor / sintaxis coherente : el uso le :grep/vimgrep
permite definir un grepprg
, que puede definirse como grep/ack/ag
etc. Con esto, puede buscar en el búfer actual o en múltiples búferes / archivos, utilizando un regex
motor coherente . Por otro lado, si usa la/pattern
opción vim , está atascado en el motor de expresiones regulares predeterminado de vim, que tiene una sintaxis diferente en comparación con la extended regular expression
sintaxis. Por lo tanto, cada vez que tenga que buscar una expresión, tendrá que pensar / recordar si debe usar \)
o simplemente )
y otras diferencias. Esto puede ser muy molesto ( /programming/3864467/whats-the-difference-between-vim-regex-and-normal-regex )
vimgrep llena una lista de ubicación rápida / rápida : el uso le :grep/vimgrep
permite llenar una lista de búsqueda. ( https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d ).
Si desea usar la lista de ubicaciones, puede usar el ]q
acceso directo para navegar si tiene el complemento no dañado de Tim-Papas ( https://github.com/tpope/vim-unimpaired )
búsquedas complicadas dentro de vim : por lo general, si tiene que hacer búsquedas complicadas, puede que tenga que usar la línea de comando. Sin embargo, si define greprg
correctamente y utiliza un comando como [1]
: vim / patrón1 / find . -type f
Puede hacer búsquedas muy complicadas y mostrar los resultados de búsqueda en su location list
o quickfix list
.
[1] http://vimcasts.org/episodes/search-multiple-files-with-vimgrep/