---
title: "Guía de Resaltado de Sintaxis en Fish Shell"
description: "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."
date: 2026-02-24
categories: ["vps"]
tags: ["fish-shell"]
---

import Notice from "@components/widgets/Notice.astro";

Una de las razones por las que me pasé de [Zsh a Fish](/es/fish-shell-vs-zsh-comparacion/) fue el resaltado de sintaxis. En Zsh, necesitas el [plugin zsh-syntax-highlighting](/enable-syntax-highlighting-zsh/) 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
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:

```fish
# 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:

```fish
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
fish_config theme show
```

Para aplicar uno:

```fish
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
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:

```fish
# 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:

```fish
# ~/.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:

```fish
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](/enable-syntax-highlighting-zsh/). 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](/es/fish-shell-vs-zsh-comparacion/) — 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:

```fish
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](/es/fish-shell-temas-prompts/) — temas de prompt Tide, Starship, Pure
- [Guía de autocompletado en Fish Shell](/es/fish-shell-autocompletado-sugerencias/) — los colores del pager afectan al completado
- [Fish Shell vs Zsh](/es/fish-shell-vs-zsh-comparacion/) — resaltado integrado vs plugin zsh-syntax-highlighting
- [Activar resaltado de sintaxis en Zsh](/enable-syntax-highlighting-zsh/) — si también usas Zsh
- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — primeros pasos
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — guía de configuración en Mac