Tools: Mejorando mi terminal WSL con FZF, BAT, FD y Delta - 2025 Update
Herramientas que vamos a usar
1. Buscar comandos anteriores con Ctrl + R
2. Buscar archivos con Ctrl + F y abrirlos con bat
¿Qué hace cada herramienta?
3. Mejorar git diff con delta
Configuración completa para copiar y pegar
Resumen En este post comparto una configuración simple pero muy útil para trabajar más cómodo en WSL/Linux desde la terminal. La idea es tener tres mejoras principales: Instalamos algunas herramientas modernas para la terminal: En Ubuntu/WSL, algunos comandos se instalan con nombres distintos: Aseguramos que ~/.local/bin esté en el PATH: Una de las funciones más útiles de fzf es mejorar el historial de comandos. Normalmente, Ctrl + R busca comandos anteriores de forma básica. Con fzf, se convierte en un buscador interactivo. Para activarlo, añade esto a tu ~/.bashrc: Luego recarga la terminal: Y buscar comandos antiguos escribiendo parte del comando. Esto es muy útil cuando sabes que ya ejecutaste un comando, pero no recuerdas exactamente cómo era. Otra mejora muy práctica es usar Ctrl + F para buscar archivos dentro del proyecto actual usando fd + fzf, con preview usando bat. Añade este bloque al final de tu ~/.bashrc: Esto abre un buscador interactivo de archivos. Mientras navegas por los resultados, ves una vista previa del contenido gracias a bat. Este comando solo devuelve la ruta del archivo seleccionado. fd es una alternativa moderna a find. Buscar solo archivos: Buscar solo carpetas: fzf permite buscar de forma interactiva en listas. Esto lista archivos y permite elegir uno escribiendo parte del nombre. bat es como cat, pero mejorado: Incluye resaltado de sintaxis, número de líneas y mejor lectura. En nuestro caso lo usamos también como preview dentro de fzf: delta mejora mucho la salida de git diff. En vez de ver un diff plano, puedes tener: Configuración recomendada: Ahora simplemente ejecuta: Y verás una salida mucho más cómoda. Para ver cambios staged: Puedes añadir estos alias a tu ~/.bashrc: Este sería un bloque final para añadir al ~/.bashrc: Y para configurar delta: Después de esta configuración, el flujo de trabajo queda mucho más cómodo: Es una configuración pequeña, pero mejora bastante el día a día trabajando desde la terminal en WSL. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse
$ -weight: 600;">sudo -weight: 500;">apt -weight: 500;">update
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y fzf fd-find bat -weight: 500;">git-delta
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">update
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y fzf fd-find bat -weight: 500;">git-delta
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">update
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y fzf fd-find bat -weight: 500;">git-delta
mkdir -p ~/.local/bin # fd se instala como fdfind
ln -sf $(which fdfind) ~/.local/bin/fd # bat se instala como batcat
ln -sf $(which batcat) ~/.local/bin/bat
mkdir -p ~/.local/bin # fd se instala como fdfind
ln -sf $(which fdfind) ~/.local/bin/fd # bat se instala como batcat
ln -sf $(which batcat) ~/.local/bin/bat
mkdir -p ~/.local/bin # fd se instala como fdfind
ln -sf $(which fdfind) ~/.local/bin/fd # bat se instala como batcat
ln -sf $(which batcat) ~/.local/bin/bat
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
fd --version
bat --version
fzf --version
delta --version
fd --version
bat --version
fzf --version
delta --version
fd --version
bat --version
fzf --version
delta --version
# =========================
# FZF KEY BINDINGS
# ========================= if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then source /usr/share/doc/fzf/examples/key-bindings.bash
fi
# =========================
# FZF KEY BINDINGS
# ========================= if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then source /usr/share/doc/fzf/examples/key-bindings.bash
fi
# =========================
# FZF KEY BINDINGS
# ========================= if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then source /usr/share/doc/fzf/examples/key-bindings.bash
fi
source ~/.bashrc
source ~/.bashrc
source ~/.bashrc
-weight: 500;">docker
-weight: 500;">git commit
ssh
-weight: 500;">npm -weight: 500;">install
terraform plan
-weight: 500;">docker
-weight: 500;">git commit
ssh
-weight: 500;">npm -weight: 500;">install
terraform plan
-weight: 500;">docker
-weight: 500;">git commit
ssh
-weight: 500;">npm -weight: 500;">install
terraform plan
Ctrl + F → buscar archivo → Enter → abrir archivo con bat
Ctrl + F → buscar archivo → Enter → abrir archivo con bat
Ctrl + F → buscar archivo → Enter → abrir archivo con bat
# =========================
# FZF CUSTOM SHORTCUTS
# ========================= # Ctrl + F: buscar archivo con fzf y abrirlo con bat
bind -x '"\C-f": selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Alias: buscar archivo con preview y abrirlo con bat
alias ff='selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Alias: buscar archivo con preview y devolver la ruta
alias fp='fd -t f | fzf --preview "bat --color=always --line-range :200 {}"' # =========================
# END FZF CUSTOM SHORTCUTS
# =========================
# =========================
# FZF CUSTOM SHORTCUTS
# ========================= # Ctrl + F: buscar archivo con fzf y abrirlo con bat
bind -x '"\C-f": selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Alias: buscar archivo con preview y abrirlo con bat
alias ff='selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Alias: buscar archivo con preview y devolver la ruta
alias fp='fd -t f | fzf --preview "bat --color=always --line-range :200 {}"' # =========================
# END FZF CUSTOM SHORTCUTS
# =========================
# =========================
# FZF CUSTOM SHORTCUTS
# ========================= # Ctrl + F: buscar archivo con fzf y abrirlo con bat
bind -x '"\C-f": selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Alias: buscar archivo con preview y abrirlo con bat
alias ff='selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Alias: buscar archivo con preview y devolver la ruta
alias fp='fd -t f | fzf --preview "bat --color=always --line-range :200 {}"' # =========================
# END FZF CUSTOM SHORTCUTS
# =========================
source ~/.bashrc
source ~/.bashrc
source ~/.bashrc
fd README
fd main
fd ".py$"
fd README
fd main
fd ".py$"
fd README
fd main
fd ".py$"
fd -t f | fzf
fd -t f | fzf
fd -t f | fzf
bat README.md
bat README.md
bat README.md
fzf --preview "bat --color=always --line-range :200 {}"
fzf --preview "bat --color=always --line-range :200 {}"
fzf --preview "bat --color=always --line-range :200 {}"
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y -weight: 500;">git-delta
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y -weight: 500;">git-delta
-weight: 600;">sudo -weight: 500;">apt -weight: 500;">install -y -weight: 500;">git-delta
-weight: 500;">git config --global core.pager "delta"
-weight: 500;">git config --global interactive.diffFilter "delta --color-only"
-weight: 500;">git config --global delta.navigate true
-weight: 500;">git config --global delta.side-by-side true
-weight: 500;">git config --global merge.conflictstyle diff3
-weight: 500;">git config --global diff.colorMoved default
-weight: 500;">git config --global core.pager "delta"
-weight: 500;">git config --global interactive.diffFilter "delta --color-only"
-weight: 500;">git config --global delta.navigate true
-weight: 500;">git config --global delta.side-by-side true
-weight: 500;">git config --global merge.conflictstyle diff3
-weight: 500;">git config --global diff.colorMoved default
-weight: 500;">git config --global core.pager "delta"
-weight: 500;">git config --global interactive.diffFilter "delta --color-only"
-weight: 500;">git config --global delta.navigate true
-weight: 500;">git config --global delta.side-by-side true
-weight: 500;">git config --global merge.conflictstyle diff3
-weight: 500;">git config --global diff.colorMoved default
-weight: 500;">git diff --staged
-weight: 500;">git diff --staged
-weight: 500;">git diff --staged
# =========================
# GIT ALIASES
# ========================= alias gs='-weight: 500;">git -weight: 500;">status'
alias gd='-weight: 500;">git diff'
alias gds='-weight: 500;">git diff --staged'
alias gl='-weight: 500;">git log --oneline --graph --decorate --all'
# =========================
# GIT ALIASES
# ========================= alias gs='-weight: 500;">git -weight: 500;">status'
alias gd='-weight: 500;">git diff'
alias gds='-weight: 500;">git diff --staged'
alias gl='-weight: 500;">git log --oneline --graph --decorate --all'
# =========================
# GIT ALIASES
# ========================= alias gs='-weight: 500;">git -weight: 500;">status'
alias gd='-weight: 500;">git diff'
alias gds='-weight: 500;">git diff --staged'
alias gl='-weight: 500;">git log --oneline --graph --decorate --all'
source ~/.bashrc
source ~/.bashrc
source ~/.bashrc
gs
gd
gds
gl
gs
gd
gds
gl
gs
gd
gds
gl
# =========================
# CUSTOM TERMINAL SETUP
# ========================= # Local binaries
export PATH="$HOME/.local/bin:$PATH" # FZF key bindings: Ctrl + R
if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then source /usr/share/doc/fzf/examples/key-bindings.bash
fi # Ctrl + F: buscar archivo con fzf y abrirlo con bat
bind -x '"\C-f": selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Buscar archivo con preview y abrirlo con bat
alias ff='selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Buscar archivo con preview y devolver la ruta
alias fp='fd -t f | fzf --preview "bat --color=always --line-range :200 {}"' # Git aliases
alias gs='-weight: 500;">git -weight: 500;">status'
alias gd='-weight: 500;">git diff'
alias gds='-weight: 500;">git diff --staged'
alias gl='-weight: 500;">git log --oneline --graph --decorate --all' # =========================
# END CUSTOM TERMINAL SETUP
# =========================
# =========================
# CUSTOM TERMINAL SETUP
# ========================= # Local binaries
export PATH="$HOME/.local/bin:$PATH" # FZF key bindings: Ctrl + R
if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then source /usr/share/doc/fzf/examples/key-bindings.bash
fi # Ctrl + F: buscar archivo con fzf y abrirlo con bat
bind -x '"\C-f": selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Buscar archivo con preview y abrirlo con bat
alias ff='selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Buscar archivo con preview y devolver la ruta
alias fp='fd -t f | fzf --preview "bat --color=always --line-range :200 {}"' # Git aliases
alias gs='-weight: 500;">git -weight: 500;">status'
alias gd='-weight: 500;">git diff'
alias gds='-weight: 500;">git diff --staged'
alias gl='-weight: 500;">git log --oneline --graph --decorate --all' # =========================
# END CUSTOM TERMINAL SETUP
# =========================
# =========================
# CUSTOM TERMINAL SETUP
# ========================= # Local binaries
export PATH="$HOME/.local/bin:$PATH" # FZF key bindings: Ctrl + R
if [ -f /usr/share/doc/fzf/examples/key-bindings.bash ]; then source /usr/share/doc/fzf/examples/key-bindings.bash
fi # Ctrl + F: buscar archivo con fzf y abrirlo con bat
bind -x '"\C-f": selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Buscar archivo con preview y abrirlo con bat
alias ff='selected=$(fd -t f | fzf --preview "bat --color=always --line-range :200 {}"); [ -n "$selected" ] && bat "$selected"' # Buscar archivo con preview y devolver la ruta
alias fp='fd -t f | fzf --preview "bat --color=always --line-range :200 {}"' # Git aliases
alias gs='-weight: 500;">git -weight: 500;">status'
alias gd='-weight: 500;">git diff'
alias gds='-weight: 500;">git diff --staged'
alias gl='-weight: 500;">git log --oneline --graph --decorate --all' # =========================
# END CUSTOM TERMINAL SETUP
# =========================
-weight: 500;">git config --global core.pager "delta"
-weight: 500;">git config --global interactive.diffFilter "delta --color-only"
-weight: 500;">git config --global delta.navigate true
-weight: 500;">git config --global delta.side-by-side true
-weight: 500;">git config --global merge.conflictstyle diff3
-weight: 500;">git config --global diff.colorMoved default
-weight: 500;">git config --global core.pager "delta"
-weight: 500;">git config --global interactive.diffFilter "delta --color-only"
-weight: 500;">git config --global delta.navigate true
-weight: 500;">git config --global delta.side-by-side true
-weight: 500;">git config --global merge.conflictstyle diff3
-weight: 500;">git config --global diff.colorMoved default
-weight: 500;">git config --global core.pager "delta"
-weight: 500;">git config --global interactive.diffFilter "delta --color-only"
-weight: 500;">git config --global delta.navigate true
-weight: 500;">git config --global delta.side-by-side true
-weight: 500;">git config --global merge.conflictstyle diff3
-weight: 500;">git config --global diff.colorMoved default
Ctrl + R → buscar comandos anteriores
Ctrl + F → buscar archivos y abrirlos con bat
ff → buscar archivo y abrirlo con bat
fp → buscar archivo y obtener la ruta
gd → ver -weight: 500;">git diff con delta
gds → ver -weight: 500;">git diff staged
gs → ver -weight: 500;">git -weight: 500;">status
Ctrl + R → buscar comandos anteriores
Ctrl + F → buscar archivos y abrirlos con bat
ff → buscar archivo y abrirlo con bat
fp → buscar archivo y obtener la ruta
gd → ver -weight: 500;">git diff con delta
gds → ver -weight: 500;">git diff staged
gs → ver -weight: 500;">git -weight: 500;">status
Ctrl + R → buscar comandos anteriores
Ctrl + F → buscar archivos y abrirlos con bat
ff → buscar archivo y abrirlo con bat
fp → buscar archivo y obtener la ruta
gd → ver -weight: 500;">git diff con delta
gds → ver -weight: 500;">git diff staged
gs → ver -weight: 500;">git -weight: 500;">status - Ctrl + R para buscar comandos anteriores.
- Ctrl + F para buscar archivos y abrirlos con bat.
- -weight: 500;">git diff mejorado con delta. - Mejor resaltado.
- Comparación lado a lado.
- Colores más claros.
- Mejor lectura de cambios grandes.