---
title: "Guía de Historial y Persistencia en Fish Shell"
description: "Cómo Fish Shell gestiona el historial de comandos, incluyendo búsqueda, eliminación, fusión entre sesiones, el archivo de historial y consejos para mantener un historial limpio."
date: 2026-02-20
categories: ["vps"]
tags: ["fish-shell"]
---

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

El historial de Fish es una de esas funciones que trabaja tan bien que rara vez piensas en ella. Los comandos se guardan automáticamente, se comparten entre sesiones (con algunas salvedades) y se pueden buscar de varias formas. Pero hay cosas que vale la pena saber sobre cómo funciona internamente, sobre todo si te importa mantener un historial limpio o sincronizarlo entre máquinas.

## Dónde se almacena el archivo de historial

Fish guarda el historial en:

```
~/.local/share/fish/fish_history
```

Es un archivo de texto plano con marcas de tiempo. Cada entrada tiene este aspecto:

```
- cmd: git commit -m "fix auth"
  when: 1708784400
```

El archivo crece con el tiempo. Fish no tiene un límite estricto de tamaño como Bash (`HISTSIZE`). Por defecto, Fish conserva 256.000 entradas (o unos 16 MB de historial). En la práctica, nunca llegarás a ese límite a menos que añadas historial mediante scripts.

## Buscar en el historial

### Teclas de flechas

El método más sencillo. Pulsa la **flecha arriba** para recorrer los comandos anteriores. Si has escrito algo primero, la flecha arriba solo muestra comandos que empiezan con lo que escribiste.

Escribe `git` y luego pulsa la flecha arriba — Fish recorre solo tus comandos de git. Es una búsqueda de historial basada en prefijo.

### Ctrl+R (búsqueda inversa)

Pulsa `Ctrl+R` y empieza a escribir. Fish busca en tu historial comandos que contengan lo que escribiste, usando sintaxis glob. Escribe `git*fix` y coincide con comandos que contienen "git" seguido más adelante de "fix".

Navega por los resultados con las teclas de flechas o sigue escribiendo para acotar la búsqueda. Pulsa Enter para ejecutar el comando seleccionado, o Escape para cancelar.

Si tienes [fzf.fish](/es/mejores-plugins-fish-shell/) instalado, `Ctrl+R` abre una búsqueda interactiva con fzf, que es aún mejor.

### El comando history

Para búsquedas más precisas:

```fish
# Buscar comandos que contengan "docker"
history search docker

# Buscar por prefijo
history search --prefix "git commit"

# Coincidencia exacta
history search --exact "git push origin main"

# Mostrar marcas de tiempo
history search --show-time docker

# Limitar resultados
history search --max 10 docker

# Búsqueda sensible a mayúsculas
history search --case-sensitive Docker
```

Por defecto, `history search` no distingue mayúsculas y ordena del más reciente al más antiguo. Añade `--reverse` para invertir el orden.

## Eliminar entradas del historial

A veces ejecutas un comando con un error tipográfico, o accidentalmente pones datos sensibles en la línea de comandos. Fish te permite limpiar eso.

### Eliminación interactiva

```fish
history delete docker
```

Esto busca comandos que coincidan con "docker" y te muestra las coincidencias. Puedes introducir números de entradas específicas para eliminar, un rango, o `all` para quitar todas las coincidencias.

### Eliminación exacta

```fish
history delete --exact --case-sensitive "docker login -p my_secret_password"
```

Esto elimina ese comando específico sin preguntar.

### Eliminar con el plugin sponge

El [plugin sponge](/es/mejores-plugins-fish-shell/) elimina automáticamente del historial los comandos que fallan (código de salida distinto de cero). Instálalo con:

```fish
fisher install meaningful-ooo/sponge
```

Me resulta útil porque mantiene los comandos mal escritos y los experimentos fallidos fuera de mis autosugerencias.

## Controlar qué se guarda en el historial

### La función fish_should_add_to_history

Fish 4.0 añadió un hook que te permite controlar qué comandos se guardan. Define esta función para filtrar entradas del historial:

```fish
# ~/.config/fish/functions/fish_should_add_to_history.fish
function fish_should_add_to_history
    # No guardar comandos que empiezan con un espacio
    string match -qr '^\s' -- $argv[1]; and return 1

    # No guardar comandos cortos
    test (string length -- $argv[1]) -lt 3; and return 1

    # No guardar comandos con patrones sensibles
    string match -qr 'password|secret|token|api.key' -- $argv[1]; and return 1

    return 0
end
```

Devuelve 0 para guardar el comando, 1 para omitirlo.

### Espacio inicial para omitir el historial

La función anterior demuestra un patrón común: añadir un espacio antes del comando para que no se registre en el historial. Esto imita el comportamiento de `HISTCONTROL=ignorespace` en Bash. Fish no hace esto por defecto — necesitas la función `fish_should_add_to_history`.

## Historial entre múltiples sesiones

Fish gestiona el historial de múltiples sesiones de forma diferente a Bash. Cada sesión de Fish mantiene su propio historial en memoria y escribe en el archivo de historial compartido. Así funciona:

- Cuando ejecutas un comando, se añade al historial de la sesión actual y se escribe en disco.
- Otras sesiones en ejecución no ven el nuevo comando inmediatamente.
- Las sesiones nuevas que se inicien después de guardar el comando sí lo verán.
- `history merge` fuerza a la sesión actual a cargar comandos de todas las demás sesiones.

### Fusionar historial

```fish
history merge
```

Esto importa el historial de otras sesiones de Fish a la actual. Útil si ejecutaste algo en otra pestaña del terminal y quieres acceder a ello con Ctrl+R o la búsqueda con flechas.

Algunas personas lo añaden a un atajo de teclado:

```fish
bind \em 'history merge; commandline -f repaint'
```

Ahora `Alt+M` fusiona y redibuja el prompt.

### Limpiar historial

```fish
# Limpiar todo (con confirmación)
history clear

# Limpiar solo el historial de la sesión actual
history clear-session
```

`clear-session` es útil cuando has estado experimentando y no quieres que esos comandos contaminen tu historial, pero quieres conservar todo lo anterior.

## Guardar historial manualmente

```fish
history save
```

Esto fuerza una escritura inmediata en disco. Fish guarda automáticamente de forma periódica, pero esto asegura que nada se pierda si el shell se cierra inesperadamente.

### Añadir comandos sin ejecutarlos

```fish
history append "some command I want to remember"
```

Esto añade el comando al historial sin ejecutarlo. Útil para guardar comandos que quieras encontrar después con `Ctrl+R`.

## Formato del archivo de historial y respaldo

El archivo de historial es fácil de respaldar y portable entre máquinas:

```fish
cp ~/.local/share/fish/fish_history ~/fish_history_backup
```

Para restaurar:

```fish
cp ~/fish_history_backup ~/.local/share/fish/fish_history
history merge
```

Si gestionas dotfiles entre máquinas, puedes crear un enlace simbólico o sincronizar el archivo de historial. Ten en cuenta que las escrituras concurrentes desde varias máquinas podrían causar conflictos — fusiona manualmente si es necesario.

## Consejos útiles sobre el historial

**Usa abreviaturas en lugar de depender del historial.** Si usas un comando cada día, añádelo como [abreviatura](/es/fish-shell-abreviaturas-vs-alias/) en lugar de buscarlo en el historial cada vez.

**Busca dentro de los resultados.** Cuando la búsqueda con Ctrl+R muestra demasiados resultados, añade más caracteres o usa patrones glob. `git*main` filtra mejor que solo `git`.

**Combina con fzf.** El [plugin fzf.fish](/es/mejores-plugins-fish-shell/) reemplaza el Ctrl+R integrado con una búsqueda difusa mucho más rápida de navegar. Muestra una vista previa y permite selección múltiple.

**Elimina patrones.** Si cambiaste una contraseña y accidentalmente escribiste la antigua en un comando, `history delete --prefix "mysql -p"` lo limpia rápido.

## Guías relacionadas

- [Autocompletado y sugerencias en Fish Shell](/es/fish-shell-autocompletado-sugerencias/) — el historial alimenta las autosugerencias
- [Mejores plugins para Fish Shell](/es/mejores-plugins-fish-shell/) — fzf.fish y sponge para mejor historial
- [Guía de funciones en Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) — crear fish_should_add_to_history
- [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