---
title: "Abreviaturas vs Alias en Fish Shell - ¿Cuál es la Diferencia?"
description: "Fish Shell tiene abreviaturas y alias. Esta guía explica cómo funciona cada uno, cuándo usar cuál, y por qué las abreviaturas suelen ser la mejor opción."
date: 2026-02-22
categories: ["vps"]
tags: ["fish-shell"]
---

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

Si vienes a Fish desde Bash o Zsh, probablemente configuraste alias para los comandos que usas con frecuencia. Fish también tiene alias, pero además tiene algo llamado abreviaturas, y funcionan de una manera diferente que importa.

Yo cambié todos mis alias por abreviaturas después de usar Fish durante una semana, y creo que la mayoría debería hacer lo mismo. Te explico por qué.

## ¿Qué son los alias en Fish?

Un alias en Fish funciona igual que en otros shells. Defines un atajo que se expande a un comando más largo:

```fish
alias gs="git status"
alias ll="ls -la"
alias dc="docker compose"
```

Cuando escribes `gs` y presionas enter, Fish ejecuta `git status`. En tu historial de comandos, guarda `gs`, no `git status`.

Fish implementa los alias como funciones envolventes. Cuando ejecutas `alias gs="git status"`, Fish crea una función llamada `gs` que ejecuta `git status`. Puedes verificarlo con:

```fish
type gs
# Output: gs is a function with definition
# function gs --wraps='git status' --description 'alias gs=git status'
#   git status $argv
# end
```

Para hacer los alias persistentes, agrégalos a `~/.config/fish/config.fish` o a un archivo en `~/.config/fish/conf.d/`.

## ¿Qué son las abreviaturas?

Las abreviaturas se ven similares cuando las defines:

```fish
abbr -a gs git status
abbr -a ll ls -la
abbr -a dc docker compose
```

La diferencia está en lo que pasa cuando las usas. Escribe `gs` y presiona espacio o enter, y Fish reemplaza `gs` con `git status` *en la línea de comandos* antes de ejecutarlo. Ves el texto completo `git status`, y eso es lo que queda en tu historial.

Es un sistema de expansión de texto, no un envoltorio de comandos. Tu abreviatura se activa, el texto en la línea de comandos cambia, y luego se ejecuta lo que quedó en la línea.

## Por qué las abreviaturas suelen ser mejores

### Tu historial se mantiene legible

Con alias, tu historial está lleno de códigos cortos. Alguien que mire `gs` en tu [historial](/es/fish-shell-historial-persistencia/) (o tú mismo, seis meses después) tiene que recordar qué significa `gs`. Con abreviaturas, el historial muestra `git status` porque eso es lo que realmente se ejecutó.

Esto también significa que la búsqueda en el historial con `Ctrl+R` funciona con los comandos reales. Busca "git status" y lo encontrarás, aunque hayas escrito `gs`.

### Otras personas pueden leer tu pantalla

Si compartes tu terminal (programación en pareja, grabaciones de pantalla, tutoriales), las abreviaturas muestran los comandos reales. Nadie tiene que descifrar tus atajos personales.

### Puedes editar antes de ejecutar

Después de que una abreviatura se expande, el texto completo está en tu línea de comandos y puedes modificarlo. Escribe `gs`, presiona espacio (se expande a `git status`), y luego agrega ` --short` al final. Con alias, no puedes insertar flags fácilmente en medio del comando aliasado.

### Sin sobrecarga de funciones

Los alias crean funciones envolventes. Las abreviaturas no — son puro reemplazo de texto. La diferencia es mínima en la práctica, pero las abreviaturas son conceptualmente más simples.

## Cuándo usar alias en su lugar

Los alias siguen siendo útiles en algunos casos:

**Cuando necesitas manipular argumentos del comando.** Si tu atajo necesita manipular argumentos de formas que van más allá del reemplazo de texto, una [función](/es/fish-shell-funciones-comandos-personalizados/) tiene más sentido:

```fish
# Esto necesita ser una función, no una abreviatura
function mkcd
    mkdir -p $argv[1] && cd $argv[1]
end
```

**Cuando necesitas flags por defecto en comandos existentes.** Si quieres que `ls` siempre use `--color=auto`, un alias funciona:

```fish
alias ls="ls --color=auto"
```

Podrías hacerlo con una abreviatura, pero la expansión sería visible cada vez, lo cual resulta molesto para comandos que ejecutas constantemente.

**Cuando quieres un nombre de comando completamente diferente** que no necesite mostrar su expansión. Algunas personas prefieren mantener sus atajos opacos.

## Funcionalidades de las abreviaturas

Las abreviaturas en Fish se han vuelto más potentes con el tiempo, especialmente en Fish 4.x. Estas son las opciones que vale la pena conocer.

### Posición: command vs. anywhere

Por defecto, las abreviaturas solo se expanden cuando están en posición de comando (la primera palabra en la línea):

```fish
abbr -a gs git status        # solo se expande como comando
abbr -a -p anywhere L "| less"   # se expande en cualquier parte de la línea
```

La abreviatura `L` te permite escribir `cat file.txt L` y se expande a `cat file.txt | less`.

### Abreviaturas específicas por comando

Desde Fish 4.0, las abreviaturas pueden restringirse a comandos específicos:

```fish
abbr -a --command git co checkout
abbr -a --command git br branch
abbr -a --command docker ps "ps --format 'table {{.Names}}\t{{.Status}}'"
```

Ahora `co` solo se expande a `checkout` cuando el comando en la línea es `git`. Escribe `co` por sí solo y no pasa nada.

Esto es genial para flujos de trabajo con git. Puedes escribir `git co` y que se expanda a `git checkout` sin contaminar el espacio global de abreviaturas.

### Abreviaturas con regex

Puedes usar expresiones regulares para definir los disparadores de abreviaturas:

```fish
abbr -a --regex '.+\.txt' --position command --function vim_edit
```

Esto coincidiría con cualquier palabra que termine en `.txt` y la pasaría a través de una función personalizada. La documentación de Fish tiene más ejemplos de esto.

### Posición del cursor con --set-cursor

Puedes controlar dónde queda el cursor después de la expansión:

```fish
abbr -a gcm --set-cursor "git commit -m '%'"
```

Escribe `gcm`, presiona espacio, y se expande a `git commit -m ''` con tu cursor entre las comillas. El marcador `%` (el valor por defecto) se elimina y el cursor aterriza ahí.

### Abreviaturas basadas en funciones

Para expansiones dinámicas, puedes apuntar una abreviatura a una función:

```fish
function last_history_item
    echo $history[1]
end
abbr -a !! --position anywhere --function last_history_item
```

Esto recrea la funcionalidad `!!` de Bash (último comando). Escribe `sudo !!` y se expande a `sudo <tu-último-comando>`.

## Gestión de abreviaturas

```fish
abbr                   # listar todas las abreviaturas (la salida se puede reutilizar como comandos)
abbr --list            # listar solo los nombres de abreviaturas
abbr --erase gs        # eliminar una abreviatura
abbr --rename gs gst   # renombrar una abreviatura
```

### Guardar abreviaturas

La forma recomendada es poner tus comandos `abbr -a` en un archivo de configuración:

```fish
# ~/.config/fish/conf.d/abbreviations.fish
abbr -a gs git status
abbr -a ga git add
abbr -a gc git commit
abbr -a gp git push
abbr -a gd git diff
abbr -a gl git log --oneline
abbr -a dc docker compose
abbr -a dcu docker compose up -d
abbr -a dcd docker compose down
abbr -a k kubectl
```

También puedes exportar tus abreviaturas actuales a un archivo:

```fish
abbr > ~/.config/fish/conf.d/abbreviations.fish
```

Esto las guarda en un formato que Fish puede cargar directamente.

## Mi configuración de abreviaturas

Esto es lo que uso realmente:

```fish
# Git
abbr -a gs git status
abbr -a ga git add
abbr -a gaa git add --all
abbr -a gc git commit
abbr -a gcm --set-cursor "git commit -m '%'"
abbr -a gp git push
abbr -a gl git log --oneline
abbr -a gco git checkout
abbr -a gd git diff
abbr -a gb git branch

# Docker
abbr -a dc docker compose
abbr -a dcu docker compose up -d
abbr -a dcd docker compose down
abbr -a dcl docker compose logs -f
abbr -a dps docker ps

# Navegación
abbr -a -p anywhere L "| less"
abbr -a -p anywhere G "| grep"

# Sistema
abbr -a sa sudo apt
abbr -a sai sudo apt install
```

Si estás configurando Fish por primera vez, revisa mi [guía de instalación de Fish Shell](/es/instalar-fish-shell-ubuntu/). Para plugins que complementan las abreviaturas, mira [los mejores plugins y herramientas para Fish Shell](/es/mejores-plugins-fish-shell/). Y para una visión más amplia de Fish comparado con otros shells, lee [Fish Shell vs Bash vs Zsh](/es/fish-shell-vs-bash-vs-zsh-comparacion/) o la comparación enfocada [Fish vs Zsh](/es/fish-shell-vs-zsh-comparacion/). También te puede interesar explorar [el autocompletado y sugerencias de Fish](/es/fish-shell-autocompletado-sugerencias/), que combinan muy bien con las abreviaturas.