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.

Guía de Resaltado de Sintaxis en Fish Shell

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:

ElementoAspecto (por defecto)Variable
Comandos válidosAzulfish_color_command
Comandos inválidosRojofish_color_error
Parámetros/argumentosCianfish_color_param
Opciones (flags que empiezan con -)Cianfish_color_option
Cadenas entre comillasAmarillofish_color_quote
Redirecciones (>, >>, |)Cianfish_color_redirection
Rutas de archivo válidasSubrayadofish_color_valid_path
Comentarios (# …)Grisfish_color_comment
Secuencias de escape (\n, \t)Cianfish_color_escape
AutosugerenciasGrisfish_color_autosuggestion
Selección (modo visual de vi)Blanco sobre azulfish_color_selection
Coincidencias de búsquedaFondo amarillofish_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 sesionesfish_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