Skip to content

Terminal productivity: las herramientas que transformaron mi flujo de trabajo

Andrés Ujpán

El ecosistema CLI vivió una revolución silenciosa. Herramientas escritas en Rust y Go reemplazaron binarios Unix con décadas de antigüedad, añadiendo colores, syntax highlighting, fuzzy search y Git-awareness casi sin sacrificar velocidad. Estas son las que uso a diario.

Table of contents

Open Table of contents

Shell: Zsh + Starship

Starship es sin duda el prompt que más mejora la experiencia con el menor esfuerzo. Funciona con cualquier shell, es increíblemente rápido (escrito en Rust) y muestra contexto relevante: branch de Git, versión de Node/Python/Rust, estado del último comando.

# Estilo minimalista pero informativo
format = """
$directory\
$git_branch\
$git_status\
$nodejs\
$rust\
$python\
$cmd_duration\
$line_break\
$character"""

[git_branch]
symbol = " "
style = "bold purple"

[git_status]
conflicted = "⚔️ "
ahead = "⇡${count}"
behind = "⇣${count}"
modified = "✎${count}"
untracked = "?${count}"

[cmd_duration]
min_time = 2_000
format = "took [$duration](bold yellow)"~/.config/starship.toml

Reemplazos de herramientas clásicas

lseza (antes exa)

eza --tree --level=2 --icons --git    # árbol con iconos y estado Git
eza -la --sort=modified               # lista larga, ordenada por fecha

findfd

# find: verboso y poco ergonómico
find . -name "*.ts" -not -path "*/node_modules/*"

# fd: intuitivo, respeta .gitignore por defecto
fd -e ts                    # todos los .ts del proyecto    
fd -e ts --exec bat {}      # abrir cada resultado con bat  

grepripgrep (rg)

# grep clásico
grep -r "useEffect" src/ --include="*.tsx"

# rg: 5-10× más rápido, respeta .gitignore
rg "useEffect" --type ts
rg "TODO|FIXME|HACK" --type ts --stats
rg "deprecated" -l                               # solo nombres de archivo 

catbat

bat es cat con syntax highlighting, número de líneas, paginado y Git diff integrado:

bat src/components/Header.astro     # con colores y líneas
bat --diff archivo.ts               # muestra cambios Git inline

cdzoxide

Aprende a qué directorios vas con frecuencia y permite saltar a ellos con pocas letras:

z astro      # salta a ~/proyectos/mi-blog-astro si es el que más visitas
z blog src   # coincidencia múltiple
zi           # modo interactivo con fzf

Multiplexor: tmux con configuración moderna

# Prefijo más cómodo
set -g prefix C-a
unbind C-b

# Dividir paneles con teclas intuitivas
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# Navegación con Alt+flecha (sin prefijo)
bind -n M-Left  select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up    select-pane -U
bind -n M-Down  select-pane -D

# Mouse activado
set -g mouse on

# Colores 256
set -g default-terminal "tmux-256color"~/.tmux.conf

Fuzzy finder: fzf — el multiplicador de todo

fzf convierte cualquier lista en un buscador interactivo. Solo añade | fzf a cualquier comando.

# Buscar en historial de comandos
CTRL+R con fzf integrado

# Checkout de branch con preview
git branch | fzf --preview 'git log --oneline {}' | xargs git checkout

# Matar procesos
ps aux | fzf --multi | awk '{print $2}' | xargs kill

# Buscar y abrir archivo
fd -e ts | fzf --preview 'bat --color=always {}' | xargs nvim

Git moderno: lazygit

Una TUI (Terminal UI) de Git que hace obvio lo que está pasando en tu repositorio:

lazygit   # abre la interfaz

Características destacadas:

Mi .zshrc básico optimizado

# Carga rápida con lazy loading
export PATH="$HOME/.cargo/bin:$HOME/.local/bin:$PATH"

# Aliases modernos
alias ls='eza --icons'
alias ll='eza -la --icons --git'
alias tree='eza --tree --icons'
alias cat='bat'
alias find='fd'
alias grep='rg'
alias lg='lazygit'

# fzf integración
source <(fzf --zsh)

# zoxide
eval "$(zoxide init zsh)"

# starship
eval "$(starship init zsh)"~/.zshrc

La mejor inversión de tiempo en productividad de terminal no es aprender nuevas herramientas — es dominar las que ya tienes. Pero cuando una herramienta moderna hace lo mismo 5× más rápido con mejor DX, el cambio se paga solo en la primera semana.

Editar este post
Anterior
PostgreSQL y JSONB: el poder de una base relacional con flexibilidad documental