Fish Shell en macOS - Guía Completa de Configuración

Cómo instalar y configurar Fish Shell en macOS con Homebrew, establecerlo como shell por defecto, configurar iTerm2 o Ghostty, e instalar herramientas esenciales.

Fish Shell en macOS - Guía Completa de Configuración

macOS viene con Zsh como shell por defecto (Apple cambió de Bash en 2019). Fish no está incluido, pero está a un solo comando de Homebrew. Uso Fish tanto en mi Mac como en mis máquinas Linux, y la experiencia es casi idéntica en ambos — que es una de las cosas que me gustan.

Esta guía cubre la configuración completa en macOS: instalación, hacer de Fish tu shell por defecto, configuración del emulador de terminal y las herramientas esenciales que instalo junto a él.

Instalar Fish con Homebrew

Si todavía no tienes Homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Instalar Fish:

brew install fish

Verificar la versión:

fish --version

Deberías ver fish, version 4.5.0 o más reciente. Homebrew mantiene Fish actualizado — ejecuta brew upgrade fish periódicamente.

Probar Fish sin cambiar de shell

Escribe fish en tu terminal actual para iniciar una sesión de Fish. Juega con las autosugerencias (empieza a escribir y observa las sugerencias grises que aparecen), el completado con Tab y el resaltado de sintaxis. Escribe exit para volver a Zsh.

Establecer Fish como shell por defecto

macOS requiere que el shell esté listado en /etc/shells antes de poder configurarlo como predeterminado. Homebrew instala Fish en /opt/homebrew/bin/fish (Apple Silicon) o /usr/local/bin/fish (Intel).

# Find your Fish path
which fish

# Add it to allowed shells
echo (which fish) | sudo tee -a /etc/shells

# Set as default
chsh -s (which fish)

Abre una nueva ventana de terminal. Deberías estar en Fish.

Para volver a Zsh después: chsh -s /bin/zsh.

Conserva Zsh

Los scripts del sistema de macOS a veces esperan Zsh o Bash. No los elimines. Fish reemplaza tu shell interactivo, no la capa de scripting del sistema.

Configuración del emulador de terminal

Fish funciona en cualquier terminal, pero la fuente importa. El paginador de completado de Fish y muchos temas de prompt usan caracteres especiales que necesitan una Nerd Font.

Instalar una Nerd Font

brew install font-meslo-lg-nerd-font

Luego configúrala como la fuente de tu terminal. Así se hace en las opciones populares:

Ghostty

Añade a ~/.config/ghostty/config:

font-family = MesloLGS Nerd Font
font-size = 14

Ghostty es un terminal rápido con aceleración GPU. Tengo una guía completa de configuración de Ghostty si quieres explorar sus funcionalidades.

iTerm2

Ve a Preferences → Profiles → Text → Font y selecciona “MesloLGS NF”. Ajusta el tamaño a tu preferencia (yo uso 14).

También vale la pena habilitar en iTerm2:

  • Preferences → Profiles → Terminal → Shell Integration — permite hacer clic para seleccionar la salida de comandos
  • Preferences → General → Selection → Applications in terminal may access clipboard — para que las operaciones de copiado de Fish funcionen
Alacritty

En ~/.config/alacritty/alacritty.toml:

[font]
size = 14

[font.normal]
family = "MesloLGS Nerd Font"
WezTerm

En ~/.wezterm.lua:

config.font = wezterm.font("MesloLGS Nerd Font")
config.font_size = 14.0

Tengo una guía de configuración de WezTerm que cubre la integración con zoxide y tmux.

Configuración básica de Fish

Crea tu archivo de configuración:

mkdir -p ~/.config/fish
nano ~/.config/fish/config.fish

Una configuración inicial práctica para macOS:

# ~/.config/fish/config.fish

# Homebrew (Apple Silicon)
fish_add_path /opt/homebrew/bin
fish_add_path /opt/homebrew/sbin

# Common paths
fish_add_path ~/bin
fish_add_path ~/.local/bin

# Suppress the greeting
set -g fish_greeting

# Editor
set -gx EDITOR "code --wait"  # or vim, nvim, etc.

# Homebrew completions
if test -d (brew --prefix)"/share/fish/completions"
    set -p fish_complete_path (brew --prefix)/share/fish/completions
end
if test -d (brew --prefix)"/share/fish/vendor_completions.d"
    set -p fish_complete_path (brew --prefix)/share/fish/vendor_completions.d
end

El bloque de completions de Homebrew es importante — sin él, te pierdes el completado con Tab para los comandos instalados con Homebrew.

Instalar herramientas esenciales

Este es mi conjunto estándar de herramientas complementarias para Fish en macOS:

brew install fisher      # plugin manager (or install via curl)
brew install starship    # cross-shell prompt
brew install zoxide      # smarter cd
brew install eza         # modern ls replacement
brew install fzf         # fuzzy finder
brew install bat         # better cat with syntax highlighting
brew install fd          # better find
brew install ripgrep     # better grep

Configurar Fisher

Si instalaste Fisher vía Homebrew, está listo. De lo contrario:

curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher

Instalar plugins de Fish

fisher install PatrickF1/fzf.fish     # fuzzy search integration
fisher install jorgebucaran/autopair.fish  # auto-close brackets
fisher install meaningful-ooo/sponge  # remove failed commands from history

Consulta mi guía de los mejores plugins de Fish Shell para la lista completa.

Configurar Starship (o Tide)

Para Starship, añade a config.fish:

starship init fish | source

Para Tide en su lugar:

fisher install IlanCosman/tide@v6
tide configure

Comparé estas y otras opciones de prompt en Temas de Fish Shell — mejores prompts. También tengo una guía dedicada de Starship + Fish.

Configurar zoxide

Añade a config.fish:

zoxide init fish | source

Ahora usa z en lugar de cd: z projects te lleva a tu directorio de proyectos. Guía completa en mi artículo sobre zoxide.

Configurar alias de eza

# ~/.config/fish/conf.d/eza.fish
abbr -a ls eza
abbr -a ll "eza -la --icons --git"
abbr -a lt "eza -la --icons --tree --level=2"

Abreviaturas específicas de macOS

# ~/.config/fish/conf.d/macos.fish

# Quick Look from terminal
abbr -a ql "qlmanage -p"

# Open current directory in Finder
abbr -a finder "open ."

# Flush DNS
abbr -a flushdns "sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder"

# Show/hide hidden files in Finder
abbr -a showhidden "defaults write com.apple.finder AppleShowAllFiles -bool true && killall Finder"
abbr -a hidehidden "defaults write com.apple.finder AppleShowAllFiles -bool false && killall Finder"

Cubro las abreviaturas vs alias en detalle en Fish Shell abreviaturas vs alias.

Gestión de versiones de Node.js

El nvm basado en Bash no funciona en Fish. Usa nvm.fish en su lugar:

fisher install jorgebucaran/nvm.fish
nvm install lts
set --universal nvm_default_version lts

Guía completa paso a paso en mi guía de NVM con Fish Shell.

Problemas comunes en macOS

El PATH de Homebrew no funciona

En los Mac con Apple Silicon, Homebrew se instala en /opt/homebrew/ en lugar de /usr/local/. Asegúrate de que tu config.fish tenga:

fish_add_path /opt/homebrew/bin
fish_add_path /opt/homebrew/sbin

Pon estas líneas al principio de tu archivo de configuración.

Variables de entorno de .zshrc ausentes

Fish no lee .zshrc ni .bash_profile. Mueve tus variables de entorno a config.fish usando set -gx:

set -gx JAVA_HOME (/usr/libexec/java_home)
set -gx ANDROID_HOME ~/Library/Android/sdk
fish_add_path $ANDROID_HOME/platform-tools
El agente SSH no reenvía

El agente SSH de macOS funciona con Fish, pero puede que necesites cargar tus claves:

# ~/.config/fish/conf.d/ssh.fish
if status is-interactive
    ssh-add --apple-use-keychain ~/.ssh/id_ed25519 2>/dev/null
end

Guías relacionadas