Si pasas la mayoría de tu tiempo en la terminal buscando archivos o contenido dentro de ellos, es muy probable que hayas usado los clásicos comandos find, grep y cat.
Aunque útiles, estos comandos pueden sentirse torpes o poco interactivos cuando trabajas con grandes proyectos o código fuente. Afortunadamente, una combinación poderosa de herramientas modernas puede transformar tu búsqueda en algo mucho más eficiente, visual e interactivo.
La receta que exploramos aquí combina tres herramientas muy modernas y populares:
- fzf -> un buscador fuzzy interactivo para terminal
- ripgrep (rg) -> búsqueda de contenido rápida y eficiente
- bat -> muestra archivos con sintaxis resaltada y vista previa enriquecida
¿Por qué esta combinación de comandos es superior a los clásicos find, grep y cat?
1. 📂 ripgrep (rg): búsqueda rápida y sensible al contexto
ripgrep es un buscador inspirado en grep pero mucho más rápido y, respetuoso de .gitignore con soporte para expresiones regulares y búsquedas recursivas.
- Escanea grandes proyectos en segundos
- Permite incluir número de línea y columna
- Tiene detección inteligente de mayúsculas (“smart case”)
2. 🔍 fzf: filtro fuzzy interactivo
fzf muestra los resultados en una lista interactiva que puedes filtrar en tiempo real. A medida que escribes, la lista se actualiza, permitiéndote encontrar lo que buscas sin recordar rutas completas o nombres exactos.
3. 📄 bat: vista previa con estilo
bat es como cat pero con:
- Resaltado de sintaxis
- Encabezados
- Temas de color
- Integración rápida con terminales modernas
Combinado con fzf puedes ver el contenido de cada archivo antes de abrirlo.
Un comando mágico de búsqueda interactiva
Aquí tienes un ejemplo avanzado que integra todas estas herramientas en una función de shell que puedes añadir a tu .bashrc o .zshrc:
s() {
: | fzf \
--ansi \
--disabled \
--bind "change:reload:sleep 0.1; \
command rg --line-number \
--column \
--no-heading \
--color=always \
--smart-case {q} \
$* \
|| :" \
--bind "enter:execute:nano +{2},{3} {1}" \
--bind "ctrl-o:become:nano +{2},{3} {1}" \
--delimiter ":" \
--preview "command bat --style=full \
--color=always \
--highlight-line {2} \
{1}" \
--preview-window 'up:80%,border-bottom,~4,+{2}+4/3'
}
¿Cómo funciona esta maravilla?
1. Búsqueda reactiva con ripgrep
El corazón de este comando está en:
--bind "change:reload:sleep 0.1; command rg ... {q} $* || :"
Esto hace que, cada vez que escribas algo en fzf, ripgrep busque ese texto dentro de tus archivos. El sleep 0.1 actúa como debouncer, evitando búsquedas excesivas por cada tecla
La salida de ripgrep (archivo:linea:columna:coincidencia) se pasa a fzf.
2. Navegación y apertura automática
Con estas dos líneas:
--bind "enter:execute:nano +{2},{3} {1}" \
--bind "ctrl-o:become:nano +{2},{3} {1}"
Puedes:
- Presionar Enter para abrir la coincidencia en tu editor (en este caso
nano) - Presionar Ctrl+O para abrir y salir de la búsqueda directamente
- Los placeholders
{1},{2},{3}representan archivo, línea y columna respectivamente
📌 Si usas vim, nvim o emacs, también puedes personalizarlo así:
--bind "enter:execute:nvim '+call cursor({2},{3})' {1}" \
--bind "ctrl-o:become:nvim '+call cursor({2},{3})' {1}"
3. Vista previa perfecta con bat
La opción de vista previa permite que, mientras navegas por los resultados, veas el contenido del archivo con resaltado de sintaxis y líneas relevantes:
--preview "command bat --style=full --color=always --highlight-line {2} {1}"
Además, puedes controlar dónde aparece esa vista previa:
--preview-window 'up:80%,border-bottom,~4,+{2}+4/3'
La configuración anterior hace que la vista previa ocupe el 80 % de la pantalla, con bordes y resaltado de la línea coincidente.
Ventajas de usar esta función
✅ Muucho más rápida que usar find | grep manualmente
✅ Buscar y visualizar resultados en tiempo real
✅ Abrir directamente en tu editor desde la terminal
✅ Permite combinar filtros avanzados ($*)
✅ Personalizable según tus necesidades
Consejos para mejorar aún más
- Limita rutas de búsqueda para acelerar el proceso (
s path/to/project) - Filtra archivos no deseados añadiendo
--globo--ignore-casea ripgrep - Instala bat, fzf y ripgrep a través de tu gestor de paquetes favorito antes de usar la función
- Prueba alias como
alias s="s ."para ajustar al proyecto actual
Limitaciones y consideraciones
Esta función no indexa todo el sistema como lo haría un motor de búsqueda dedicado (por ejemplo, uno basado en una base de datos). Eso significa que:
- No es tan rápido para búsquedas globales en sistemas gigantescos
- Sin embargo, para proyectos de código y carpetas comunes, ripgrep es extremadamente rápido
Conclusión
Si estás cansado de combinar manualmente find, grep, y cat para buscar dentro de archivos, esta función te da:
- Una experiencia de búsqueda interactiva superior
- Resultados en tiempo real conforme escribes tu consulta
- Vista previa enriquecida con sintaxis
- Apertura inmediata en cualquier editor
Convierte tu terminal en un explorador de código súper eficiente con solo unas líneas en tu configuración de shell.
