Las 3 herramientas que van a cambiar tu terminal para siempre

Vistas: 1
0:00 / 0:00

Hoy te traigo lo que considero el auténtico tridente de la terminal. Se trata de la combinación de tres herramientas espectaculares: fzf, ripgrep y bat. Son utilidades independientes que, cuando se usan por separado, ya te dan una ventaja enorme. Sin embargo, cuando las conectas mediante pipes y creas funciones personalizadas, transformas tu flujo de trabajo por completo. No exagero cuando te digo que una vez integrado este ecosistema en tu día a día, ya no hay vuelta atrás. En este episodio vamos a destripar cada una de estas herramientas. Veremos qué son, por qué funcionan tan bien, cómo instalarlas en distintas distribuciones y, lo más divertido de todo, cómo fusionarlas para crear un entorno de trabajo rápido, visual y adaptado a tus necesidades.

El auténtico tridente de la terminal

El primer diente del tridente: fzf (Fuzzy Finder)

Comenzamos con la herramienta que sirve como pegamento interactivo para todo lo que hagamos en la terminal. Desarrollada por Junegunn Choi y escrita en Go, fzf es un buscador difuso interactivo de propósito general. Se distribuye como un único binario sin dependencias y su único objetivo es leer una lista de elementos desde la entrada estándar, permitirte filtrar interactivamente y devolver el elemento seleccionado por la salida estándar.

¿Qué es eso de la búsqueda difusa?

La búsqueda tradicional requiere que conozcas la coincidencia exacta de caracteres para encontrar algo. Si tienes un archivo llamado servidor_nginx_configuracion.conf y buscas nginx config, la búsqueda clásica fallará porque las palabras no están juntas.

La búsqueda difusa cambia las reglas del juego. Con escribir letras sueltas que aparezcan en el archivo, como srv ngx conf, el algoritmo de fzf calcula la distancia y la coincidencia de esos caracteres a lo largo del texto y te mostrará el resultado en tiempo real. Esto te ahorra memorizar rutas eternas o nombres de archivos excesivamente largos.

Instalación de fzf

Puedes instalar fzf de forma muy sencilla en prácticamente cualquier distribución de Linux.

En Debian, Ubuntu y derivados:

sudo apt update
sudo apt install fzf

En Arch Linux:

sudo pacman -S fzf

En Fedora:

sudo dnf install fzf

Una vez instalado, es sumamente recomendable, yo te diría que es imprescindible, que configures la integración con tu shell para habilitar los atajos de teclado y el autocompletado. Si utilizas Bash o Zsh, puedes ejecutar el script de instalación oficial que suele incluirse con la herramienta o añadir la configuración correspondiente a tu archivo .bashrc o .zshrc.

Los atajos de teclado que te cambian la vida

Una vez que habilitas la integración de fzf, dispones de tres atajos que agilizan de forma drástica tu navegación por el sistema:

  • Control + R: Es mi favorito absoluto. Sustituye la clásica y aburrida búsqueda hacia atrás del historial por un menú visual interactivo. Empiezas a escribir una parte de un comando que ejecutaste hace tres semanas y fzf te lo filtra en milisegundos.
  • Control + T: Lista todos los archivos del directorio actual y de sus subdirectorios de forma interactiva. El archivo que selecciones se pegará directamente en el lugar donde tengas el cursor de escritura, ideal para combinarlo con comandos de copia, edición o movimiento.
  • Alt + C: Sirve para moverte por tus directorios a la velocidad de la luz. Te despliega la estructura de carpetas, buscas la que te interesa, pulsas Enter y automáticamente harás un cambio de directorio hacia esa ubicación.

El autocompletado mágico de fzf

Otra característica espectacular es el autocompletado inteligente usando el disparador de doble asterisco seguido de la tecla tabulador. Por ejemplo, si quieres conectarte por SSH a un servidor pero no recuerdas el nombre exacto del host, puedes escribir:

ssh **

Al pulsar la tecla Tabulador, fzf leerá tu archivo ~/.ssh/config y tu historial para mostrarte una lista interactiva de todos tus hosts conocidos para que elijas uno visualmente.

Lo mismo sucede si necesitas finalizar un proceso rebelde. En lugar de ejecutar un comando para listar los procesos y luego buscar el identificador manualmente, puedes escribir:

kill **

Al tabular, se abrirá un listado interactivo con todos los procesos activos en tu sistema para que busques por nombre y envíes la señal de apagado al proceso correcto de forma segura.

El segundo diente: ripgrep (rg) para búsquedas instantáneas

Si vienes usando el comando grep para buscar fragmentos de texto dentro de tus archivos, prepárate para dar un salto de gigante. Programado en Rust por Andrew Gallant, ripgrep es una alternativa moderna que busca patrones de texto mediante expresiones regulares con una velocidad que roza lo absurdo.

¿Por qué ripgrep es tan ridículamente rápido?

La velocidad de ripgrep no se debe solo a que esté escrito en Rust. Se debe a un diseño inteligente enfocado en el uso real que hacemos los desarrolladores y administradores de sistemas en nuestro día a día:

  • Respeta tus archivos de ignore: Por defecto, ripgrep no busca dentro de los directorios o archivos especificados en tu .gitignore, .ignore o .rgignore. Esto significa que ignorará automáticamente carpetas masivas como node_modules o directorios ocultos como .git, ahorrándote tiempo y procesamiento de forma nativa.
  • Evita archivos binarios y ocultos: A menos que le indiques explícitamente lo contrario, no perderá el tiempo analizando archivos que no sean de texto plano.
  • Optimización con SIMD: Utiliza aceleración de hardware SIMD para realizar búsquedas de texto paralelas a bajísimo nivel, sacando el máximo partido a tu procesador.

Instalación de ripgrep

La herramienta se empaqueta bajo el nombre de ripgrep o su ejecutable rg.

En Debian y Ubuntu:

sudo apt install ripgrep

En Arch Linux:

sudo pacman -S ripgrep

En Fedora:

sudo dnf install ripgrep

Casos de uso prácticos de ripgrep

El uso más básico de ripgrep es buscar una palabra clave dentro del directorio actual:

rg "texto_a_buscar"

Esto te devolverá de forma instantánea el archivo, el número de línea y la coincidencia con un resaltado de color muy claro y legible. Pero podemos ir más allá gracias a sus útiles parámetros:

  • Contar coincidencias con -c: Si solo quieres saber cuántas veces aparece un término en cada archivo de tu proyecto, utiliza rg -c "termino".
  • Líneas de contexto con -A y -B: A veces no te basta con ver la línea donde está la palabra, necesitas ver lo que hay antes y después. Con rg -B 2 -A 3 "termino" verás dos líneas antes (Before) y tres líneas después (After) de cada coincidencia.
  • Filtrado por tipo de archivo con -t: Si estás trabajando en un proyecto mixto pero solo quieres buscar dentro de tus scripts de Python, puedes usar rg -t py "def de_mi_funcion".

El tercer diente del tridente: bat, un clon de cat con alas

La tercera pieza de nuestro tridente es bat (que en algunas distribuciones derivadas de Debian se instala con el nombre de batcat para evitar colisiones de nombres). Desarrollada por David Peter y programada también en Rust, es una alternativa moderna al clásico comando cat.

Las limitaciones del clásico cat

El comando cat es fantástico para mostrar rápidamente el contenido de un archivo corto, pero se ha quedado anticuado para el análisis rápido de código o configuraciones complejas. No tiene colores, no numera las líneas y si el archivo es demasiado largo, inunda la terminal obligándote a usar herramientas externas como less para poder leerlo con comodidad.

Las ventajas de pasarte a bat

bat resuelve todos estos inconvenientes ofreciendo una presentación impecable desde el primer momento:

  • Resaltado de sintaxis integrado: Admite una cantidad enorme de lenguajes de programación y formatos de marcado (Markdown, YAML, JSON, Python, etc.). Identifica el tipo de archivo por su extensión o por la cabecera y te muestra el código coloreado de forma exquisita.
  • Integración con Git: Se conecta de forma transparente con Git para mostrarte en el margen izquierdo marcas visuales del estado de las líneas: un símbolo más verde si la línea es nueva, un signo de modificación amarillo si ha cambiado, o un indicador rojo si se ha eliminado algo respecto a tu último commit.
  • Paginación automática: Si el contenido del archivo supera el alto de tu pantalla, bat redirige automáticamente la salida a su propio paginador interactivo para que puedas desplazarte usando las teclas de dirección o la barra espaciadora.

Instalación de bat

En Debian y Ubuntu (recuerda que aquí el comando se invoca como batcat):

sudo apt install bat

Si prefieres usar el comando bat en lugar de batcat, puedes crear un alias sencillo en tu archivo de configuración del shell o crear un enlace simbólico en tu ruta local:

mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat

En Arch Linux:

sudo pacman -S bat

En Fedora:

sudo dnf install bat

Personalizando el estilo visual de bat

Una de las características más amigables de bat es que incluye multitud de temas de color preinstalados. Puedes ver la lista completa ejecutando:

bat --list-themes

Esto te mostrará una vista previa de cada tema aplicando tu propio código. Si encuentras uno que te encante, puedes establecerlo de forma permanente definiendo la variable de entorno BAT_THEME en tu .bashrc o .zshrc:

export BAT_THEME="Monokai Extended"

Alternativamente, puedes crear un archivo de configuración en ~/.config/bat/config e indicar tus parámetros preferidos, como por ejemplo:

--theme="Monokai Extended"
--style="numbers,changes,header"

Armando el tridente: la fusión definitiva de las tres herramientas

Ahora llega la parte que más me divierte: conectar las tres piezas para crear flujos de trabajo personalizados. La terminal de Linux destaca precisamente por su capacidad de canalizar la salida de un programa como entrada de otro. Si sumamos la velocidad de búsqueda de ripgrep, la interactividad de fzf y la belleza visual de bat, conseguimos soluciones increíblemente potentes.

El buscador de texto interactivo definitivo (rfb)

Imagina que quieres buscar una función de código o una configuración dentro de cientos de archivos de texto. Quieres poder filtrar esos resultados visualmente sobre la marcha y, al mismo tiempo, previsualizar de qué archivo se trata en una ventana lateral con el texto coloreado y la línea exacta destacada.

Podemos conseguir esto combinando nuestras tres herramientas en una única función de shell. Añade el siguiente bloque de código al final de tu archivo .bashrc o .zshrc:

rfb() {
  if [ -z "$1" ]; then
    echo "Uso: rfb <texto_a_buscar>"
    return 1
  fi

  rg --line-number --no-heading --color=always --smart-case "$1" | \
    fzf --ansi \
        --color="ansi" \
        --delimiter=":" \
        --preview="bat --color=always --highlight-line={2} {1}" \
        --preview-window="right:60%:wrap" \
        --bind="enter:become(nano +{2} {1})"
}

Vamos a explicar paso a paso qué está ocurriendo en esta genialidad de función:

  1. Búsqueda con ripgrep: Ejecutamos rg buscando el texto que le pasamos como argumento. Le pedimos que nos devuelva el número de línea, que no agrupe los resultados bajo una cabecera, que mantenga los colores para que fzf los interprete y que use búsqueda inteligente de mayúsculas y minúsculas (–smart-case).
  2. Filtrado con fzf: Pasamos la salida a fzf usando el parámetro –ansi para que entienda los códigos de color. Definimos los dos puntos (:) como delimitador para separar la ruta del archivo del número de línea.
  3. Previsualización interactiva con bat: Aquí ocurre la magia. Usamos el parámetro –preview de fzf para lanzar bat en la parte derecha de la pantalla. El parámetro {1} representa el primer campo (la ruta del archivo) y {2} representa el segundo campo (el número de línea). Le indicamos a bat que previsualice el archivo destacando en color brillante la línea exacta donde ripgrep encontró la coincidencia.
  4. Edición instantánea: Al pulsar la tecla Enter, la instrucción –bind=»enter:become(…)» abrirá tu editor favorito (en este ejemplo, nano, pero puedes cambiarlo por vim, nvim o code) posicionando el cursor de forma automática en la línea exacta del archivo seleccionado para que edites de inmediato.

Un explorador de commits de Git visual e interactivo

Si trabajas a menudo con repositorios de Git, sabrás que inspeccionar los cambios pasados puede ser un proceso algo tosco en la terminal. Podemos usar nuestro tridente para crear un visualizador de commits interactivo de forma muy elegante.

Prueba a añadir esta función a tu configuración:

git_log_interactivo() {
  git log --oneline --color=always | \
    fzf --ansi \
        --no-sort \
        --preview="git show --color=always {1}" \
        --preview-window="right:60%:wrap"
}

Con este sencillo comando, verás la lista compacta de commits históricos en la columna izquierda y, a medida que te desplaces por ellos con las flechas del teclado, verás en la columna derecha el parche detallado (diff) de todos los archivos modificados con la sintaxis coloreada gracias a la previsualización del propio Git combinado con el paginador.

Gestor de notas Markdown personal sin rival

Para los amantes de la productividad que tomamos notas constantemente en archivos Markdown, no hace falta recurrir a aplicaciones pesadas o de terceros. Si tienes tus notas guardadas en una carpeta local, puedes crear un gestor de notas instantáneo:

buscar_notas() {
  cd ~/mis_notas || return
  fd --type f --extension md | \
    fzf --preview="bat --color=always --style=plain {1}" \
        --preview-window="right:50%" \
        --bind="enter:become(${EDITOR:-nano} {1})"
}

Este pequeño script utiliza fd para listar únicamente los archivos con extensión .md de tu carpeta de notas, los pasa por fzf para que filtres el tema que estás buscando y te muestra el contenido formateado y coloreado en el lateral con bat. En el momento en que pulsas Enter, se abre tu editor favorito para que sigas escribiendo. Rápido, local y bajo tu absoluto control.

El ecosistema ampliado: completando tu caja de herramientas modernas

Para redondear este flujo de trabajo ágil, existen otras dos utilidades modernas creadas por la comunidad de código abierto que se integran perfectamente con el tridente y que vale la pena que conozcas.

fd: Una alternativa amigable al comando find

El comando find clásico de Unix es inmensamente potente, pero su sintaxis suele ser confusa y poco intuitiva para búsquedas rápidas cotidianas. La herramienta fd, escrita en Rust por el mismo creador de bat, ofrece una sintaxis simplificada, colores por defecto y un rendimiento en paralelo fantástico.

En lugar de escribir:

find . -iname "*mi_archivo*"

Con fd simplemente escribes:

fd mi_archivo

Ignora los archivos ocultos y respeta el archivo .gitignore de manera automática, funcionando igual de rápido que ripgrep pero enfocado en la localización de nombres de archivos y carpetas.

zoxide: El comando cd con memoria inteligente

Moverse entre carpetas profundas de tu disco duro suele requerir escribir rutas largas o encadenar comandos continuamente. Aquí es donde entra zoxide, un navegador de directorios inteligente escrito en Rust que aprende de tus hábitos diarios de navegación.

Una vez que lo instalas y defines su alias predeterminado (que suele ser la letra z), puedes saltar a cualquier carpeta que hayas visitado en el pasado escribiendo únicamente una pequeña parte de su nombre:

z descargas

zoxide sabrá que te refieres a /home/usuario/Descargas y te llevará allí directamente sin importar en qué parte del árbol de directorios te encuentres en ese momento. Cuanto más lo utilices, más preciso se volverá.

Conclusión. Por qué deberías dar el salto hoy mismo

La terminal de Linux no tiene por qué ser un entorno frío, gris y monótono. Herramientas modernas como fzf, ripgrep y bat demuestran que es perfectamente posible aunar la velocidad bruta y la eficiencia de la línea de comandos con una experiencia visual intuitiva, cómoda y sumamente atractiva.

La potencia real de estas herramientas radica en que no intentan abarcar demasiadas funciones de forma mediocre, sino que hacen una única tarea de manera excepcional y facilitan enormemente la comunicación con otros programas. Al integrarlas en tu stack de trabajo diario, no solo ahorrarás cientos de pulsaciones de teclado a la semana, sino que disfrutarás muchísimo más del proceso de cacharreo y administración de tus sistemas.

Te animo encarecidamente a que instales estas utilidades en tu equipo o servidor habitual, configures las funciones que hemos visto y experimentes adaptándolas a tus propias rutinas. Te aseguro que tu productividad te lo agradecerá.


Referencias

Si quieres profundizar en estas herramientas, revisar su documentación completa, descubrir configuraciones avanzadas o colaborar con sus desarrolladores, aquí tienes los enlaces oficiales a sus repositorios de código abierto:

  • fzf en GitHub: Repositorio oficial del buscador difuso interactivo desarrollado por Junegunn Choi.
  • ripgrep en GitHub: Repositorio de la utilidad de búsqueda ultrarrápida desarrollada por Andrew Gallant (BurntSushi).
  • bat en GitHub: Repositorio oficial de la alternativa moderna al comando cat creada por David Peter (sharkdp).
  • fd en GitHub: Repositorio de la herramienta simplificada de búsqueda de archivos alternativa a find.
  • zoxide en GitHub: Repositorio del navegador de directorios inteligente desarrollado por Ajeet D’Souza.

Deja una respuesta