devAlice
← Mac

Terminal Mac: iTerm2 vs WezTerm vs Ghostty + zsh + Starship

Tres opciones para reemplazar Terminal.app predeterminada, más la ruta más rápida a un entorno estable de zsh + Starship.

La Terminal.app integrada de macOS funciona, pero se queda atrás en divisiones de paneles, búsqueda, renderizado y configurabilidad. Esta guía compara iTerm2 · WezTerm · Ghostty y traza la ruta más rápida hacia un entorno estable (WezTerm + zsh + Starship + cuatro módulos).

TL;DR

OpciónFortalezasDebilidadesMejor para
WezTerm (recomendado)Configuración en Lua / aceleración GPU / multiplataformaCurva de aprendizaje de LuaDevs en solitario que prefieren configuraciones como código
iTerm2El más maduro / búsqueda/división/sesiones potentesLaberinto de GUI de configuraciónPrioriza la riqueza de características
GhosttyRápido / simple / 1.0 estableMás nuevo, algunas características faltanMinimalistas / primeros en adoptar

1. Opciones comparadas

iTerm2

El terminal macOS más antiguo. Divisiones (⌘D), repetición instantánea, búsqueda, disparadores (acciones por coincidencia de texto), restauración automática de sesión — conjunto de características rico.

WezTerm

Escrito en Rust, configurado en Lua, acelerado por GPU, multiplataforma (Mac/Linux/Win). Atajos de teclado, temas, multiplexación — todo en un archivo Lua. Reproducible.

Ghostty

1.0 estable en 2024. Rápido, acelerado por GPU, configuración mínima. Menos características que iTerm2/WezTerm pero suficiente para uso diario.

Recomendación: WezTerm

Para el escenario «gestionar configuración como código y restaurarla en una máquina nueva con un solo comando», WezTerm gana de forma clara. Se integra de forma natural con la gestión de dotfiles. Esta guía se basa en WezTerm.

2. Instalar WezTerm

brew install --cask wezterm

Primer lanzamiento → el shell predeterminado es zsh (predeterminado de macOS). Si la pantalla se renderiza, todo está bien.

3. Configuración de WezTerm — ~/.config/wezterm/wezterm.lua

mkdir -p ~/.config/wezterm && nvim ~/.config/wezterm/wezterm.lua:

local wezterm = require 'wezterm'
local config = wezterm.config_builder()
 
-- Fuentes
config.font = wezterm.font_with_fallback({
  'JetBrainsMono Nerd Font',
  'Hiragino Sans',  -- respaldo para coreano / japonés
})
config.font_size = 13.0
 
-- Esquema de colores
config.color_scheme = 'Catppuccin Mocha'  -- o 'Tokyo Night', 'Dracula'
 
-- Ventana
config.window_decorations = 'RESIZE'  -- ocultar barra de título, mantener redimensionable
config.window_padding = { left = 8, right = 8, top = 8, bottom = 8 }
config.window_background_opacity = 0.95
config.macos_window_background_blur = 20
 
-- Pestañas
config.use_fancy_tab_bar = false
config.tab_bar_at_bottom = true
config.hide_tab_bar_if_only_one_tab = true
 
-- Shell
config.default_prog = { '/opt/homebrew/bin/zsh', '-l' }  -- brew zsh (más nuevo que el predeterminado de macOS)
 
-- Atajos de teclado
config.keys = {
  -- Divisiones
  { key = 'd', mods = 'CMD', action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },
  { key = 'D', mods = 'CMD|SHIFT', action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' } },
  -- Navegación de paneles
  { key = 'LeftArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Left' },
  { key = 'RightArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Right' },
  { key = 'UpArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Up' },
  { key = 'DownArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Down' },
  -- Cerrar panel
  { key = 'w', mods = 'CMD', action = wezterm.action.CloseCurrentPane { confirm = true } },
}
 
return config

WezTerm recarga automáticamente al guardar. Prueba ⌘D para confirmar que las divisiones funcionan.

4. Actualizar zsh

macOS trae un zsh más antiguo. brew tiene uno más nuevo:

brew install zsh
which -a zsh
# /opt/homebrew/bin/zsh
# /bin/zsh
 
# Cambiar el shell predeterminado
sudo sh -c "echo /opt/homebrew/bin/zsh >> /etc/shells"
chsh -s /opt/homebrew/bin/zsh

Nuevo terminal → echo $ZSH_VERSION → 5.9+ confirma.

5. Prompt de Starship

Más ligero y rápido que oh-my-zsh. Binario único escrito en Rust:

brew install starship

Añade al final de ~/.zshrc:

eval "$(starship init zsh)"

~/.config/starship.toml:

# Activación rápida predeterminada
add_newline = true
format = """
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$cmd_duration\
$line_break\
$character"""
 
[directory]
truncation_length = 3
truncate_to_repo = true
 
[git_status]
disabled = false
ahead = "↑${count} "
behind = "↓${count} "
 
[cmd_duration]
min_time = 2000  # solo mostrar para comandos de más de 2 segundos
 
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[➜](bold red)"

Recarga con . ~/.zshrc o abre un nuevo terminal.

6. Cuatro módulos de zsh

6.1 zsh-autosuggestions

Sugerencias grises basadas en el historial:

brew install zsh-autosuggestions

~/.zshrc:

source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Acepta con .

6.2 zsh-syntax-highlighting

Colorea comandos (inválido = rojo):

brew install zsh-syntax-highlighting
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

⚠️ Fuente de syntax-highlighting al final de .zshrc para comportamiento correcto.

6.3 fzf — buscador fuzzy

brew install fzf
$(brew --prefix)/opt/fzf/install
# sí a todos los prompts

En un nuevo terminal:

  • Ctrl+R — búsqueda en historial
  • Ctrl+T — búsqueda de archivos
  • Alt+C — salto a directorio

6.4 zoxide — cd más inteligente

brew install zoxide

~/.zshrc:

eval "$(zoxide init zsh)"
z proj        # salta a una ruta de proyecto visitada frecuentemente
zi            # selector interactivo

7. Ejemplo completo de .zshrc

# Historial
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY HIST_IGNORE_DUPS HIST_IGNORE_SPACE
 
# Completado
autoload -Uz compinit && compinit
 
# Brew
eval "$(/opt/homebrew/bin/brew shellenv)"
 
# Módulos
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
eval "$(zoxide init zsh)"
 
# Alias
alias ll='ls -lah'
alias gs='git status -sb'
alias gd='git diff'
alias ..='cd ..'
 
# Herramientas
eval "$(starship init zsh)"
 
# (Debe ir al final)
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

8. Configuración rápida de iTerm2 (alternativa)

Si prefieres iTerm2 sobre WezTerm:

brew install --cask iterm2
  • Preferencias → Perfiles → Default → Texto → Fuente = JetBrainsMono Nerd Font 13pt
  • Ventana → Transparencia 5%, Desenfoque activado
  • Teclas → Ventana de tecla de acceso — vincula un atajo global como ⌥ Space para flotante

La característica estrella de iTerm2 es la ventana de tecla de acceso (terminal flotante accesible desde cualquier lugar). WezTerm se puede configurar para un comportamiento similar, pero iTerm2 lo incluye de fábrica.

Verificación

  1. Nuevo terminal → el prompt de Starship aparece (con ruta coloreada / rama de git)
  2. Ctrl+R → búsqueda de historial interactiva con fzf
  3. ls → zsh-syntax-highlighting colorea el comando
  4. Escribe parte de un comando anterior → sugerencia gris → presiona
  5. z proj → salta a una carpeta de proyecto visitada anteriormente
  6. WezTerm ⌘D → panel dividido → ⌘⌥← para navegar

Solución de problemas

El syntax highlighting no muestra color

  • No se cargó al final de .zshrc (debe ir después de los demás módulos).
  • El esquema de colores de WezTerm tiene menos de 256 colores: poco probable, pero prefiere Catppuccin o Tokyo Night.

Glifos deformados en Starship

Falta la Nerd Font. Comprueba la configuración de fuente de WezTerm e instala la fuente (brew install --cask font-jetbrains-mono-nerd-font).

z no hace nada

  • Falta la inicialización de zoxide en .zshrc, o no se ha recargado.
  • La base de datos está vacía al principio: haz varios cd para entrenarla.

WezTerm abre en $HOME por defecto

Establece en la configuración: config.default_cwd = wezterm.home_dir .. '/work', o crea un alias que cambie a tu carpeta.

chsh no cambió el shell

  • El nuevo shell no se añadió a /etc/shells y chsh falla.
  • Cierra sesión y vuelve a iniciarla, o reinicia.

Referencias

Historial de cambios

  • 2026-05-12: Primera versión. Tres terminales comparadas + WezTerm + zsh + Starship + cuatro módulos + cinco casos de solución de problemas.