Logotipo de Bitdoze

Cómo Activar el Resaltado de Sintaxis en Zsh

Aprende a activar el resaltado de sintaxis en ZSH para mejorar tu experiencia al programar. Cubre la instalación, la personalización de colores y los highlighters opcionales.

Dragos

Actualizado Publicado 16 min de lectura

Cómo Activar el Resaltado de Sintaxis en Zsh

Zsh no colorea los comandos mientras escribes de forma predeterminada. El plugin zsh-syntax-highlighting lo soluciona. Resalta comandos, opciones, cadenas, rutas y errores en tiempo real, de forma similar a como Fish shell funciona de fábrica.

Con el resaltado de sintaxis, los comandos válidos aparecen en un color, los inválidos en otro, y las cadenas y rutas también tienen sus propios colores. Detectas los errores de tecleo antes de pulsar Enter.

ZSH viene preinstalado en macOS (desde Catalina). En Linux, tendrás que instalarlo primero.

Guías relacionadas de ZSH:

Qué hace zsh-syntax-highlighting

El plugin resalta tu línea de comandos mientras escribes, antes de que pulses Enter. Colorea:

  • Comandos: los comandos válidos en un color, los desconocidos/inválidos en rojo (por defecto)
  • Opciones: flags como --verbose o -la reciben colores distintos
  • Cadenas: las cadenas con comillas simples, dobles y sin comillas se diferencian
  • Rutas: las rutas de archivos existentes se resaltan (subrayadas por defecto)
  • Palabras reservadas: if, for, while, case, etc.
  • Globs y expansiones: *.txt, $(command), $variable

El highlighter predeterminado (llamado main) cubre todo esto. También hay highlighters opcionales para coincidencia de paréntesis, patrones regex y avisos de usuario root (más sobre ellos abajo).

El plugin requiere ZSH 4.3.11+. Cualquier versión moderna de ZSH lo cumple.

Paso 1: Instala zsh-syntax-highlighting

Hay cuatro formas de instalarlo. Elige la que encaje con tu configuración.

Opción A: Con Oh My Zsh

Si usas Oh My Zsh:

bash
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
  ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Después edita ~/.zshrc y añade zsh-syntax-highlighting a tu lista de plugins. Debe ser el último plugin de la lista:

zsh
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Si todavía no tienes Oh My Zsh:

bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Opción B: Instalación manual (sin Oh My Zsh)

Clona el repositorio y haz source del script:

bash
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
  ~/.zsh/zsh-syntax-highlighting

Añade esto al final de tu ~/.zshrc:

zsh
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Opción C: Con Homebrew (macOS)

bash
brew install zsh-syntax-highlighting

Añade al final de tu ~/.zshrc:

zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Opción D: Gestor de paquetes del sistema (Linux)

El plugin está empaquetado para la mayoría de las distribuciones de Linux:

Distro Nombre del paquete Comando source
Debian/Ubuntu zsh-syntax-highlighting source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
Fedora zsh-syntax-highlighting source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
Arch Linux zsh-syntax-highlighting (AUR/community) source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
openSUSE zsh-syntax-highlighting source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Instálalo con tu gestor de paquetes y después añade la línea source correspondiente al final de tu ~/.zshrc.

Paso 2: Haz source al final de .zshrc

Este es el error más común que comete la gente. zsh-syntax-highlighting debe cargarse después de todo lo demás en tu .zshrc: después de Oh My Zsh, después de compinit, después de otros plugins, después de los widgets personalizados.

El plugin funciona enganchándose al editor de línea de ZSH (ZLE). Si se carga antes que otras cosas que modifican la línea de comandos, esas modificaciones no dispararán el re-resaltado.

Si usas Oh My Zsh y zsh-syntax-highlighting es el último plugin de tu array plugins=(), esto se gestiona automáticamente. Para instalaciones manuales, pon la línea source al final del todo de .zshrc.

Paso 3: Recarga y prueba

Aplica los cambios:

bash
source ~/.zshrc

O abre una pestaña nueva de terminal. Después prueba:

  1. Escribe un comando válido como ls. Debería aparecer coloreado (verde por defecto en muchos temas).
  2. Escribe un comando inexistente como asdfg. Debería aparecer en rojo.
  3. Escribe echo "hello". La cadena "hello" debería tener su propio color.

Si ves colores, está funcionando.

Personalizar los colores del resaltado de sintaxis

Los colores predeterminados son razonables, pero puedes sobreescribir cualquiera de ellos. Añade esto a ~/.zshrc antes de la línea source del plugin.

Ajustes de estilo habituales

zsh
typeset -A ZSH_HIGHLIGHT_STYLES

# Comandos válidos, el predeterminado es 'fg=green' en muchas configuraciones
ZSH_HIGHLIGHT_STYLES[command]='fg=blue,bold'

# Comandos desconocidos, el predeterminado es 'fg=red'
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold'

# Alias
ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold'

# Builtins del shell (cd, echo, export, etc.)
ZSH_HIGHLIGHT_STYLES[builtin]='fg=blue'

# Palabras reservadas del shell (if, for, while, case)
ZSH_HIGHLIGHT_STYLES[reserved-word]='fg=yellow,bold'

# Rutas de archivos existentes
ZSH_HIGHLIGHT_STYLES[path]='fg=cyan,underline'

# Cadenas entre comillas simples
ZSH_HIGHLIGHT_STYLES[single-quoted-argument]='fg=yellow'

# Cadenas entre comillas dobles
ZSH_HIGHLIGHT_STYLES[double-quoted-argument]='fg=yellow'

# Opciones/flags de comandos (--verbose, -la)
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=cyan'
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=cyan'

# Expresiones glob (*.txt, *.log)
ZSH_HIGHLIGHT_STYLES[globbing]='fg=green,bold'

# Operadores de redirección (>, >>, |)
ZSH_HIGHLIGHT_STYLES[redirection]='fg=magenta'

# Sustituciones de comando ($(echo foo))
ZSH_HIGHLIGHT_STYLES[command-substitution]='fg=cyan'

# Asignaciones (FOO=bar)
ZSH_HIGHLIGHT_STYLES[assign]='fg=green'

Desactivar un resaltado concreto

Para desactivar el resaltado de un estilo en particular:

zsh
ZSH_HIGHLIGHT_STYLES[globbing]='none'

Nombres de estilo disponibles

El highlighter main define estas claves de estilo (no es una lista exhaustiva, pero cubre las que más probablemente querrás personalizar):

Nombre del estilo Qué resalta
command Nombres de comandos externos
alias Alias
builtin Builtins del shell (cd, pwd, shift)
function Nombres de funciones
reserved-word if, for, while, case, etc.
unknown-token Comandos inválidos/desconocidos (errores)
path Rutas de archivos existentes
path_prefix Prefijos de rutas existentes
single-quoted-argument Cadenas 'entre comillas simples'
double-quoted-argument Cadenas "entre comillas dobles"
dollar-quoted-argument Cadenas $'con comillas de dólar'
single-hyphen-option Flags estilo -o
double-hyphen-option Flags estilo --option
globbing Patrones glob (*.txt)
redirection <, >, >>, pipes
comment Comentarios (cuando INTERACTIVE_COMMENTS está activo)
assign Asignaciones de variables
default Todo lo demás

La sintaxis de colores sigue el formato zle_highlight de ZSH: fg=color,bold, bg=color, underline, standout, etc. Puedes combinar atributos con comas.

Highlighters opcionales

El highlighter main está activo por defecto. El plugin incluye varios más que puedes activar:

Highlighter Qué hace
main Resaltado de comandos, opciones, cadenas y rutas (predeterminado)
brackets Resalta corchetes y paréntesis coincidentes con colores
pattern Resalta texto que coincide con patrones definidos por el usuario
regexp Resalta texto que coincide con regexps definidas por el usuario
cursor Resalta la posición del cursor
root Resalta toda la línea cuando ejecutas como root (fondo rojo)
line Aplica un estilo a toda la línea de comandos

Para activar highlighters adicionales, añádelos al array ZSH_HIGHLIGHT_HIGHLIGHTERS:

zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets cursor)

Ejemplo de coincidencia de paréntesis

Activa el highlighter brackets y personaliza los colores:

zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS+=(brackets)

# Par de paréntesis coincidentes
ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=cyan,bold'
ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=green,bold'
ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=magenta,bold'

# Paréntesis sin pareja (error)
ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]='standout'

Aviso de usuario root

El highlighter root hace que toda la línea de comandos sea visualmente distinta cuando has iniciado sesión como root. Una buena red de seguridad:

zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS+=(root)
ZSH_HIGHLIGHT_STYLES[root]='bg=red'

Resaltado por patrones

Resalta patrones concretos que tú defines. Útil para marcar comandos arriesgados:

zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS+=(pattern)
ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')

Esto hace que los comandos rm -rf destaquen con un fondo rojo.

Poniéndolo todo junto

Un ~/.zshrc mínimo con el resaltado de sintaxis configurado:

zsh
# Oh My Zsh
export ZSH="$HOME/.oh-my-zsh"
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
source $ZSH/oh-my-zsh.sh

# Estilos de autocompletado
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
zstyle ':completion:*' menu select

# Personalización del resaltado de sintaxis (antes del source del plugin)
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold'
ZSH_HIGHLIGHT_STYLES[command]='fg=blue,bold'
ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold'

Sin Oh My Zsh:

zsh
# Sistema de autocompletado
autoload -Uz compinit && compinit

# Plugins
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

# Resaltado de sintaxis, debe ser lo ÚLTIMO
ZSH_HIGHLIGHT_STYLES[unknown-token]='fg=red,bold'
ZSH_HIGHLIGHT_STYLES[command]='fg=blue,bold'
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

Nota: con instalaciones manuales, los ajustes de ZSH_HIGHLIGHT_STYLES van antes de la línea source.

Limitar la longitud del resaltado

Si editas líneas de comandos muy largas y notas lag, puedes limitar la longitud máxima de línea que se resalta:

zsh
ZSH_HIGHLIGHT_MAXLENGTH=512

Las líneas de más de 512 caracteres no se resaltarán. Por defecto no hay límite.

Solución de problemas

No aparecen colores: Asegúrate de que la línea source está al final del todo de .zshrc. Esta es la solución más común con diferencia. Ejecuta source ~/.zshrc o abre una terminal nueva para probar.

Plugin no encontrado (Oh My Zsh): Verifica que el directorio del plugin existe:

bash
ls ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Si está vacío, vuelve a clonar el plugin.

Los colores se ven mal o invisibles: El esquema de colores de tu terminal puede estar en conflicto. Por ejemplo, si tu fondo es verde oscuro y “comando válido” también es verde, no verás nada. Ajusta los estilos como se muestra en la sección de personalización, o cambia el esquema de colores de tu terminal.

El resaltado se rompe tras añadir otros plugins: Como zsh-syntax-highlighting debe cargarse el último, añadir un plugin nuevo después de él puede causar problemas. En Oh My Zsh, asegúrate de que zsh-syntax-highlighting sigue al final de tu array plugins=(). Para instalaciones manuales, mueve su línea source al final.

Escritura lenta en comandos largos: Define ZSH_HIGHLIGHT_MAXLENGTH con un valor razonable (como 512) para saltarte el resaltado en entradas muy largas.

¿Quieres resaltado de sintaxis sin plugins? Fish Shell incluye resaltado de sintaxis, autosugerencias y autocompletados completos de fábrica. Consulta la comparativa Fish Shell vs Zsh si quieres explorar esa opción.