Guía de Resaltado de Sintaxis en Fish Shell
Cómo funciona el resaltado de sintaxis integrado en Fish Shell, cómo personalizar los colores para comandos, errores, rutas y cadenas, además de gestión de temas.
Una de las razones por las que me pasé de Zsh a Fish fue el resaltado de sintaxis. En Zsh, necesitas el plugin zsh-syntax-highlighting y algo de configuración para que los comandos se coloreen mientras escribes. En Fish, viene integrado y funciona desde la primera vez que abres el shell.
Fish resalta tu línea de comandos en tiempo real. Los comandos válidos aparecen en un color, los inválidos en rojo, las cadenas tienen su propio color, las rutas de archivos que existen aparecen subrayadas. Detectas errores tipográficos antes de pulsar Enter. Sin plugins, sin configuración.
Esta guía cubre cómo funciona y cómo personalizar los colores.
Qué resalta Fish
Fish colorea diferentes partes de la línea de comandos según su significado:
| Elemento | Aspecto (por defecto) | Variable |
|---|---|---|
| Comandos válidos | Azul | fish_color_command |
| Comandos inválidos | Rojo | fish_color_error |
| Parámetros/argumentos | Cian | fish_color_param |
| Opciones (flags que empiezan con -) | Cian | fish_color_option |
| Cadenas entre comillas | Amarillo | fish_color_quote |
| Redirecciones (>, >>, |) | Cian | fish_color_redirection |
| Rutas de archivo válidas | Subrayado | fish_color_valid_path |
| Comentarios (# …) | Gris | fish_color_comment |
| Secuencias de escape (\n, \t) | Cian | fish_color_escape |
| Autosugerencias | Gris | fish_color_autosuggestion |
| Selección (modo visual de vi) | Blanco sobre azul | fish_color_selection |
| Coincidencias de búsqueda | Fondo amarillo | fish_color_search_match |
La parte más útil: la validación de comandos ocurre mientras escribes. Escribe gti en lugar de git y se pone rojo al instante. No necesitas ejecutar el comando para saber que algo está mal.
Personalizar colores
Usando la interfaz web
La forma más rápida:
fish_config
Esto abre una herramienta en el navegador donde puedes hacer clic en los colores y ver una vista previa en vivo. En la pestaña “Colors”, puedes modificar cada elemento de sintaxis individualmente. Cuando estés satisfecho, haz clic en “Set Theme” y los cambios se aplican de inmediato.
Usando variables de set_color
Para configuración desde la línea de comandos:
# Hacer los comandos verdes en lugar de azules
set -U fish_color_command green
# Hacer los errores en rojo negrita
set -U fish_color_error red --bold
# Hacer las cadenas naranjas
set -U fish_color_quote bryellow
# Hacer las autosugerencias más tenues
set -U fish_color_autosuggestion 555 --dim
# Subrayar rutas válidas con un color específico
set -U fish_color_valid_path --underline cyan
Usar set -U (universal) guarda la configuración permanentemente en todas las sesiones de Fish. Usar set -g (global) solo dura la sesión actual.
Colores disponibles
Fish soporta colores con nombre y códigos hexadecimales:
Colores con nombre: black, red, green, yellow, blue, magenta, cyan, white, y sus versiones brillantes (brred, brgreen, etc.)
Colores hexadecimales: Códigos hex de tres o seis dígitos como f60 o ff6600
Modificadores: --bold, --dim, --italics, --underline, --reverse, --strikethrough
Fondo: --background=color establece el color de fondo
Ejemplos:
set -U fish_color_command 5fd700 # verde brillante (hex)
set -U fish_color_error ff0000 --bold # rojo negrita
set -U fish_color_quote ff8700 --italics # naranja cursiva
set -U fish_color_comment 6c7086 --dim # gris tenue
Temas integrados
Fish viene con varios temas de colores. Para listarlos:
fish_config theme show
Para aplicar uno:
fish_config theme choose dracula
Temas integrados populares:
- default — los colores estándar de Fish
- dracula — tema oscuro con tonos morados/rosas
- catppuccin-mocha — tema oscuro pastel
- catppuccin-latte — tema claro pastel
- nord — tonos azules fríos
- solarized-dark y solarized-light
- tomorrow y tomorrow-night
- base16-** — varias variantes Base16
Desde Fish 4.4, los temas Catppuccin también están incluidos.
Para guardar el tema permanentemente:
fish_config theme choose dracula
fish_config theme save
Aplicar temas en todas las sesiones
Si tienes varias sesiones de Fish abiertas y quieres que todas se actualicen:
# Añade esto a config.fish primero:
function apply-my-theme --on-variable=my_theme
fish_config theme choose $my_theme
end
# Luego establece la variable universal desde cualquier sesión:
set -U my_theme dracula
Todas las sesiones en ejecución recogen el cambio automáticamente.
Tema personalizado desde cero
Si quieres control total, establece cada variable explícitamente. Aquí tienes un ejemplo de tema oscuro minimalista:
# ~/.config/fish/conf.d/my-theme.fish
set -U fish_color_normal normal
set -U fish_color_command 5fd700 # green
set -U fish_color_keyword 5fd700
set -U fish_color_quote ff8700 # orange
set -U fish_color_redirection 87d7ff # light blue
set -U fish_color_end 87d7ff
set -U fish_color_error ff5f5f --bold # bold red
set -U fish_color_param 87d7ff
set -U fish_color_option 87d7ff
set -U fish_color_comment 6c7086 # grey
set -U fish_color_selection --background=3a3a5c
set -U fish_color_operator ff87d7 # pink
set -U fish_color_escape ff87d7
set -U fish_color_autosuggestion 555555
set -U fish_color_valid_path --underline
set -U fish_color_cwd 5fd7ff
set -U fish_color_cwd_root red
set -U fish_color_user 87d7ff
set -U fish_color_host normal
set -U fish_color_host_remote ff8700
set -U fish_color_status red
set -U fish_color_cancel -r
set -U fish_color_search_match --background=555555
Colores del pager (menú de completado)
El pager de completado con Tab tiene su propio conjunto de colores:
set -U fish_pager_color_completion normal # texto de completado
set -U fish_pager_color_description grey # texto de descripción
set -U fish_pager_color_prefix cyan --underline # prefijo coincidente
set -U fish_pager_color_progress white --background=cyan # barra de progreso
set -U fish_pager_color_selected_background --background=3a3a5c
Estos son independientes de los colores de sintaxis de la línea de comandos. Los colores del pager controlan lo que ves cuando pulsas Tab y navegas por las opciones de completado.
Diferencias del resaltado de sintaxis con Zsh y Bash
Bash no tiene resaltado de sintaxis en absoluto. Lo que escribes es texto plano hasta que lo ejecutas.
Zsh necesita el plugin zsh-syntax-highlighting. Funciona bien una vez instalado, pero es una dependencia externa que tienes que gestionar. zsh-syntax-highlighting soporta patrones de resaltado personalizados, que Fish no necesita porque su sistema integrado cubre más terreno.
Fish lo hace de forma nativa. El resaltado forma parte del propio shell, se ejecuta en cada pulsación de tecla y valida comandos contra tu PATH en tiempo real. No hay nada que instalar y nada que pueda quedar desactualizado.
Este es uno de los argumentos centrales a favor de Fish sobre Zsh — funciones como esta funcionan directamente sin configuración.
Solución de problemas
Los colores se ven mal — puede que tu terminal no soporte 256 colores o true color. Compruébalo con:
set_color ff8700; echo "This should be orange"; set_color normal
Si no se ve naranja, tu terminal necesita una configuración de modo de color diferente. La mayoría de terminales modernos (Ghostty, iTerm2, WezTerm, Alacritty) soportan true color por defecto.
Los colores se reinician después de reiniciar — probablemente estás usando set -g en lugar de set -U. Las variables globales no persisten. Usa universal (-U) para configuraciones de color permanentes.
El tema no se aplica a todas las sesiones — fish_config theme save solo guarda para sesiones nuevas. Usa el patrón --on-variable descrito arriba para actualizar sesiones en ejecución.
Guías relacionadas
- Temas y prompts de Fish Shell — temas de prompt Tide, Starship, Pure
- Guía de autocompletado en Fish Shell — los colores del pager afectan al completado
- Fish Shell vs Zsh — resaltado integrado vs plugin zsh-syntax-highlighting
- Activar resaltado de sintaxis en Zsh — si también usas Zsh
- Instalar Fish Shell en Ubuntu — primeros pasos
- Fish Shell en macOS — guía de configuración en Mac