Cómo hice que la búsqueda de todo el proyecto de VIM fuera perfecta con ripgrep

Sí, abandoné grep y the_silver_searcher (ag) por ripgrep.

Ya sea que se vea obligado a usar VIM en su lugar de trabajo o que sea un fanático de VIM loco como yo que se obsesiona con la productividad, la búsqueda de palabras clave en todo el proyecto es un requisito básico que todo desarrollador necesita en el arsenal de su editor. Y esperamos que sea increíblemente rápido. ⚡️

He estado usando VIM durante aproximadamente 3 años. Y viniendo de un entorno sublime, la necesidad de una búsqueda en todo el proyecto era esencial.

ripgrep y ack.vim fueron cosas que adopté al principio después de mis experiencias poco satisfactorias con grep y the_silver_searcher (ag). No he mirado atrás desde entonces.

Este artículo es el resultado de experimentar con diferentes herramientas de búsqueda y mejoras incrementales que hice durante un período de tiempo hasta que se sintió bien.

¿Por qué ack.vim y ripgrep?

  1. Rápido: he trabajado en proyectos de Symfony y JavaScript con miles de archivos y es increíblemente rápido. Aquí hay una comparación rápida con otras herramientas de búsqueda.

    Mi punto de referencia para la velocidad es "nunca debería sentirse lento". Noté una tremenda mejora después de pasar de grep, the_silver_searcher y ack.

  2. Navegación rápida : ack.vim se encarga de completar la lista Quickfix, que le permite moverse cómodamente por todos esos resultados de búsqueda en diferentes archivos.
  3. Valores predeterminados sensibles: ripgrep por defecto considera gitignore y omite automáticamente archivos / directorios ocultos y archivos binarios.

Visión general

ack.vim es un complemento VIM que actúa como un contenedor para buscar palabras clave y completar la lista Quickfix para navegar por los resultados.

ripgrep (rg) es una herramienta de línea de comandos queack.vim se utilizará internamente para realizar la búsqueda real en todo el proyecto.

Pasos

Paso 1 : instalar ripgrep

Si prefiere homebrew como yo, ejecute lo siguiente para instalar rg:

brew tap burntsushi/ripgrep //github.com/BurntSushi/ripgrep.git brew install burntsushi/ripgrep/ripgrep-bin

Aquí hay un script automatizado que uso como parte de mis archivos de puntos.

Si prefiere cualquier otro modo de instalación, consulte la sección de instalación oficial de ripgrep.

Paso 2 : Instale ack.vim

Para instalar ack.vim usando el administrador de paquetes vim-plug, agregue lo siguiente en su vimrc:

Plug 'mileszs/ack.vim' 

o consulte la sección de instalación de ack.vim.

Paso 3 : configurar ack.vim para usar rg

Agregue la siguiente configuración en su vimrc:

" ack.vim --- {{{ " Use ripgrep for searching ⚡️ " Options include: " --vimgrep -> Needed to parse the rg response properly for ack.vim " --type-not sql -> Avoid huge sql file dumps as it slows down the search " --smart-case -> Search case insensitive if all lowercase pattern, Search case sensitively otherwise let g:ackprg = 'rg --vimgrep --type-not sql --smart-case' " Auto close the Quickfix list after pressing '' on a list item let g:ack_autoclose = 1 " Any empty ack search will search for the work the cursor is on let g:ack_use_cword_for_empty_search = 1 " Don't jump to first match cnoreabbrev Ack Ack! " Maps / so we're ready to type the search keyword nnoremap / :Ack! " }}} " Navigate quickfix list with ease nnoremap  [q :cprevious nnoremap  ]q :cnext

Nota: let g:ackprgdefine el comando que ack.vim ejecutará internamente.

También tenga en cuenta que estamos usando rgaquí con algunas opciones. Mire man rgpara modificar las opciones que pueden cumplir con sus requisitos.

Para explorar las opciones de ack.vim, consulte la siguiente documentación.

Uso

Ahora que estamos listos y listos, estos son los casos de uso más comunes:

Busque una palabra debajo del cursor

Presione / seguido de enter .

Desde que lo configuramos let g:ack_use_cword_for_empty_search = 1, Ack vuelve a la palabra actual debajo del cursor para la búsqueda, por lo que no es necesario escribir esa palabra.

Búsqueda de palabras

Presione / seguido de la palabra (sin comillas) e ingrese.

Como estamos usando mayúsculas y minúsculas con ripgrep, eso hará una búsqueda que no distinga entre mayúsculas y minúsculas si la palabra está en minúsculas y una búsqueda que distingue entre mayúsculas y minúsculas en caso contrario.

Búsqueda de expresiones regulares

Presione / seguido de un patrón de expresión regular entre comillas e ingrese.

Navegación por los resultados

Ack.vim populates the results in the Quickfix list, which opens up as a separate bottom window. There are multiple ways to navigate the results list:

  • You can navigate the Quickfix list using j/k and press enter to close the Quickfix list. VIM will take you to the exact location of the found word.
  • You can also use the hotkeys ]q or [q. VIM will move the cursor to the next/previous result and will open the file in a new buffer if required.

    To close the Quickfix list once you're done, you can either go to the bottom Quickfix window and close it or just run :cclose

  • To open the Quickfix list back up, run :copen

Closing Note

And there you have it, a seamless search and navigation for your next project-wide keyword search!

If you're stuck anywhere, look for the respective ack.vim and ripgrep docs/issues in their respective repositories, or send me a message. Share the configuration you're proud of, so it can help others improve theirs.

Here are my dotfiles.