Personalización de zsh: prompt starship, historial, alias y plugins
Convierte el zsh predeterminado de macOS en un shell productivo en 30 minutos. starship + búsqueda en historial + autosuggestions + syntax highlighting.
macOS incluye zsh como shell predeterminado desde Catalina, pero la configuración de fábrica deja mucho sin aprovechar. Instalar Oh My Zsh completo añade peso y ralentiza el arranque. Esta guía personaliza solo lo necesario: prompt starship, búsqueda en historial, autosuggestions, syntax highlighting, fzf y cinco alias útiles.
La configuración del shell es uno de esos lugares donde — creo que — menos es más. En lugar de instalar frameworks completos, lo que realmente mejora la productividad diaria son tres o cuatro cambios concretos: un historial que no se pierde, sugerencias contextuales y un prompt que muestra lo que necesitas ver.
La audiencia son personas que completaron la configuración inicial de Mac y quieren pulir zsh — incluyendo sincronizar .zshrc con otras máquinas vía dotfiles.
TL;DR
- starship — prompt rápido y hermoso (más ligero que Oh My Zsh)
- zsh-autosuggestions — sugerencias grises basadas en historial (estilo fish)
- zsh-syntax-highlighting — coloriza comandos mientras escribes
- integración de fzf con el shell — búsqueda en historial moderna con
Ctrl+R - Haz commit de
.zshrca chezmoi vía dotfiles para que otras máquinas lo adopten
Requisitos previos
- macOS 14+ + Homebrew (configuración inicial de Mac)
- Un terminal capaz de Nerd Font — Terminal.app, WezTerm/iTerm2
1. Por qué el zsh predeterminado no es suficiente
- Sin información de git en el prompt: la rama y el estado sucio son invisibles.
- Búsqueda en historial limitada:
Ctrl+Rexiste, pero sin búsqueda difusa. - Autocompletado básico: Tab funciona, pero no hay sugerencias grises estilo fish.
- Sin syntax highlighting: los errores tipográficos solo se ven al pulsar Enter.
Corregir esto mejora el flujo de trabajo cada día.
2. Prompt de starship (5 min)
starship.rs: un prompt multi-shell rápido escrito en Rust. Más ligero que Powerlevel10k de oh-my-zsh, con una sobrecarga de arranque prácticamente nula.
2.1 Instalar
brew install starshipAl final de .zshrc:
eval "$(starship init zsh)"Abre un nuevo terminal — aplicado inmediatamente.
2.2 Nerd Font (para iconos)
Para ver los iconos de rama de git y lenguaje de starship necesitas una Nerd Font.
brew install --cask font-jetbrains-mono-nerd-fontCambia la fuente de tu terminal a JetBrainsMono Nerd Font. (Ver la guía de WezTerm.)
2.3 Ajustes (opcional)
~/.config/starship.toml:
# Prompt de dos líneas — info arriba, entrada abajo
add_newline = true
format = """
$directory$git_branch$git_status$nodejs$python$rust$line_break$character"""
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
[directory]
truncation_length = 3
truncate_to_repo = true
[git_branch]
symbol = " "
style = "bold purple"
[git_status]
conflicted = "⚠️ "
ahead = "⇡${count} "
behind = "⇣${count} "
staged = "[+${count}](green) "
modified = "[!${count}](yellow) "
untracked = "[?${count}](red) "Los valores predeterminados son excelentes. Empieza sin
starship.tomly ajusta solo lo que te moleste.
3. Historial: corrige los malos valores predeterminados
Añade a .zshrc:
# Tamaños del historial
HISTSIZE=50000 # líneas mantenidas en memoria
SAVEHIST=100000 # líneas guardadas en archivo
HISTFILE="$HOME/.zsh_history"
# Deduplicar + guardar inmediatamente
setopt HIST_IGNORE_ALL_DUPS # eliminar duplicados
setopt HIST_REDUCE_BLANKS # fusionar diferencias solo de espacios en blanco
setopt HIST_VERIFY # no auto-ejecutar expansiones estilo `!42`
setopt SHARE_HISTORY # todas las instancias de zsh comparten historial
setopt INC_APPEND_HISTORY # añadir al archivo de historial inmediatamente
setopt EXTENDED_HISTORY # marca de tiempo + duración
# Arriba/Abajo — búsqueda por prefijo
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Arriba
bindkey "^[[B" down-line-or-beginning-search # AbajoEfecto: escribe git c y presiona ↑; solo los comandos anteriores que empiezan con git c se recorren.
4. zsh-autosuggestions (3 min)
Sugerencias grises estilo fish para el siguiente comando. Acepta con Tab o →.
brew install zsh-autosuggestionsAl final de .zshrc:
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# Tono gris (el predeterminado es demasiado oscuro)
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#5f5f5f'
# Omite sugerencias en comandos muy largos (rendimiento)
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=80Nuevo terminal → escribe un comando → ve la sugerencia gris = OK.
5. zsh-syntax-highlighting (2 min)
Coloriza los comandos mientras escribes: válido en verde, inválido en rojo, opciones en amarillo, etc.
brew install zsh-syntax-highlightingAl final de .zshrc — debe ir después de zsh-autosuggestions:
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zshEl orden importa:
- autosuggestions
- syntax-highlighting (debe ir al final)
Al revés, ambos se rompen ocasionalmente.
6. fzf: búsqueda en historial moderna con Ctrl+R
El Ctrl+R predeterminado retrocede línea por línea. fzf ofrece búsqueda difusa con vista previa.
brew install fzf
$(brew --prefix)/opt/fzf/install --allEl script de instalación añade esto a .zshrc:
[ -f ~/.fzf.zsh ] && source ~/.fzf.zshCtrl + R— búsqueda fuzzy en historialCtrl + T— selección fuzzy de archivo en el directorio actual (p.ej.,vim <Ctrl+T>)Alt + C—cdfuzzy
7. Cinco alias útiles
Añádelos a .zshrc o, mejor, a un archivo ~/.zsh_aliases separado:
# git
alias g='git'
alias gs='git status -s'
alias gd='git diff'
alias gco='git checkout'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
# Sistema de archivos (eza — ls moderno)
alias ls='eza --git --group-directories-first'
alias ll='eza -l --git --group-directories-first --icons'
alias la='eza -la --git --group-directories-first --icons'
alias tree='eza --tree --level=3'
# Navegación de directorios
alias ..='cd ..'
alias ...='cd ../..'
# Recargar
alias zrl='source ~/.zshrc'
# Editor (VS Code o Cursor)
alias c='code .'Los alias de una sola letra pueden colisionar.
g(git) yc(code) funcionan bien cuando la intención es clara.
8. Salto de directorios con zoxide
En lugar de cd /Users/me/projects/myapp, escribe z myapp y salta directamente. Aprende los directorios que visitas con más frecuencia.
brew install zoxide.zshrc:
eval "$(zoxide init zsh --cmd cd)" # reemplaza cd mismo con zoxideUsa cd como de costumbre; zoxide aprende. Luego cd myapp salta por nombre parcial.
9. Ejemplo completo de .zshrc
Una referencia completa que combina lo anterior:
# ~/.zshrc
# ─────────────────────────────────────────────
# PATH
# ─────────────────────────────────────────────
export PATH="$HOME/.local/bin:$PATH"
# ─────────────────────────────────────────────
# Historial
# ─────────────────────────────────────────────
HISTSIZE=50000
SAVEHIST=100000
HISTFILE="$HOME/.zsh_history"
setopt HIST_IGNORE_ALL_DUPS HIST_REDUCE_BLANKS HIST_VERIFY
setopt SHARE_HISTORY INC_APPEND_HISTORY EXTENDED_HISTORY
# Arriba/Abajo — búsqueda por prefijo
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
bindkey "^[[B" down-line-or-beginning-search
# ─────────────────────────────────────────────
# Alias
# ─────────────────────────────────────────────
alias g='git'
alias gs='git status -s'
alias gd='git diff'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
alias ls='eza --git --group-directories-first'
alias ll='eza -l --git --group-directories-first --icons'
alias la='eza -la --git --group-directories-first --icons'
alias ..='cd ..'
alias ...='cd ../..'
alias zrl='source ~/.zshrc'
alias c='code .'
# ─────────────────────────────────────────────
# Plugins (el orden importa)
# ─────────────────────────────────────────────
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#5f5f5f'
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=80
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# ─────────────────────────────────────────────
# Herramientas
# ─────────────────────────────────────────────
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
eval "$(mise activate zsh)" # gestor de versiones de lenguaje — /mac/dev-toolchain
eval "$(zoxide init zsh --cmd cd)"
# ─────────────────────────────────────────────
# Prompt
# ─────────────────────────────────────────────
eval "$(starship init zsh)"10. Verificar
# En un nuevo terminal
type starship # /opt/homebrew/bin/starship
ZSH_AUTOSUGGEST_USE_ASYNC=true # autosuggest activo
echo $HISTSIZE # 50000
# Prompt de starship
cd ~/work/myrepo # el prompt muestra rama de git + iconos de lenguaje
# Sugerencias
git c # sugerencia gris — Tab para aceptar
# fzf
history | head # escribe 'git c' luego Ctrl+R — búsqueda fuzzy11. Solución de problemas
El prompt muestra glifos rotos (▢▢)
Falta la Nerd Font. Instala font-jetbrains-mono-nerd-font vía brew y cambia la fuente del terminal.
command not found: starship
which starshipno devuelve nada: ¿el prefijo de brew está en el PATH?- En Apple Silicon:
eval "$(/opt/homebrew/bin/brew shellenv)"debe estar en.zprofile.
Arranque lento del terminal (más de 1 segundo)
- Carga diferida de comandos pesados como
nvmdesde.zshrc. - Perfila con
zprof: añadezmodload zsh/zprofal inicio yzprof | head -20al final.
autosuggestions no aparece
- Orden en
.zshrc: syntax-highlighting debe cargarse después de autosuggestions. ZSH_AUTOSUGGEST_HIGHLIGHT_STYLEpuede ser demasiado parecido al color de fondo.- Prueba
unset ZSH_AUTOSUGGEST_HIGHLIGHT_STYLEpara usar el valor predeterminado.
syntax-highlighting parpadea al escribir
- Desactiva «Render fast» en WezTerm/iTerm2.
- O establece
ZSH_HIGHLIGHT_MAXLENGTH=300para desactivar el resaltado en líneas muy largas.
zsh: no matches found: *.txt
El globbing de zsh es estricto por defecto. Añade setopt NULL_GLOB a .zshrc, o escapa el patrón: \*.txt.
12. Qué sigue
- Configuración inicial de Mac: /mac/initial-setup
- Terminal (WezTerm / iTerm2): /mac/terminal
- Dotfiles con chezmoi: /mac/dotfiles — sincroniza
.zshrcentre máquinas - Cadena de herramientas de lenguajes (mise): /mac/dev-toolchain
Referencias
Historial de cambios
- 2026-05-16: Primera versión. starship + historial + autosuggestions + syntax-highlighting + fzf + alias + zoxide + ejemplo completo de .zshrc + seis casos de solución de problemas.