---
title: "Cómo Usar NVM con Fish Shell"
description: "Instala y configura nvm.fish para gestionar múltiples versiones de Node.js en Fish Shell. Cubre instalación, cambio de versiones, soporte de .nvmrc y versiones por defecto."
date: 2026-02-19
categories: ["vps"]
tags: ["fish-shell"]
---

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

El nvm original (Node Version Manager) es un script de Bash. No funciona en Fish. Si intentas cargarlo con source en Fish, obtienes errores de sintaxis porque nvm depende de características POSIX shell que [Fish deliberadamente no soporta](/es/fish-shell-vs-bash-vs-zsh-comparacion/).

La solución es **nvm.fish** — un gestor de versiones de Node separado, escrito completamente en Fish. Mismo concepto (instalar y cambiar entre versiones de Node), implementación diferente. Está hecho por la misma persona que creó [Fisher](/es/mejores-plugins-fish-shell/), y funciona muy bien.

## Instalar nvm.fish

Necesitas [Fisher](/es/mejores-plugins-fish-shell/) primero. Si no lo tienes:

```fish
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
```

Luego instala nvm.fish:

```fish
fisher install jorgebucaran/nvm.fish
```

Eso es todo. No se necesita configuración adicional. Reinicia tu shell o abre una nueva pestaña de terminal.

## Instalar versiones de Node

```fish
# Install the latest release
nvm install latest

# Install the latest LTS version
nvm install lts

# Install a specific version
nvm install 22
nvm install 20.11.0
nvm install v18.19.1

# Install an LTS line by codename
nvm install iron    # Node 20 LTS
```

nvm.fish descarga binarios precompilados de Node y los almacena en `~/.local/share/nvm/` (siguiendo la especificación XDG Base Directory). Cada versión tiene su propio directorio.

## Cambiar entre versiones

```fish
# Use a specific version (current session only)
nvm use 22
nvm use lts
nvm use latest

# Check which version is active
nvm current

# List installed versions
nvm list
```

`nvm use` cambia la versión activa de Node para tu sesión actual del shell. Abre una nueva terminal y vuelve a la versión por defecto (o a lo que especifique `.nvmrc` para ese directorio).

## Establecer una versión de Node por defecto

Sin una versión por defecto, las nuevas sesiones del shell no tendrán ningún Node gestionado por nvm en el PATH. Configúrala con una variable universal:

```fish
set --universal nvm_default_version v22
```

Ahora cada nueva sesión de Fish arranca con Node 22 activo. Puedes usar `lts`, `latest` o un número de versión específico.

## Cambio automático de versión con .nvmrc

Esta es la función que más uso. Crea un archivo `.nvmrc` en el directorio raíz de un proyecto:

```bash
echo "20" > ~/projects/legacy-app/.nvmrc
echo "22" > ~/projects/new-app/.nvmrc
```

Cuando haces `cd` a un directorio con un archivo `.nvmrc` (o `.node-version`), `nvm use` lo lee automáticamente. Funciona recorriendo el árbol de directorios hacia arriba hasta encontrar el archivo.

```fish
cd ~/projects/legacy-app
node --version  # v20.x.x

cd ~/projects/new-app
node --version  # v22.x.x
```

<Notice type="info" title="Formatos de .nvmrc">
nvm.fish soporta los mismos formatos de `.nvmrc` que el nvm original: números de versión (`20`, `20.11`, `20.11.0`), `lts`, `latest` y nombres clave de LTS (`iron`, `hydrogen`). Los archivos llamados `.node-version` también funcionan.
</Notice>

## Instalar paquetes globales por defecto

Si quieres que ciertos paquetes npm se instalen cada vez que instalas una nueva versión de Node:

```fish
set --universal nvm_default_packages yarn typescript tsx
```

Ahora `nvm install 22` también ejecutará `npm install -g yarn typescript tsx` después de descargar Node.

## Desinstalar versiones de Node

```fish
nvm uninstall v18
nvm uninstall 20.11.0
```

Esto elimina los binarios instalados del directorio de datos de nvm.

## Cambiar el mirror de descarga

Si necesitas usar un mirror (proxy corporativo, mirror de China, etc.):

```fish
set --universal nvm_mirror https://npmmirror.com/mirrors/node
```

El valor por defecto es `https://nodejs.org/dist`.

## Cambiar el directorio de datos

Por defecto, nvm.fish almacena todo en `~/.local/share/nvm/`. Cámbialo con:

```fish
set --global nvm_data ~/.nvm
```

Si antes usabas el nvm basado en Bash y tienes versiones de Node en `~/.nvm/`, esto permite que nvm.fish use ese mismo directorio. Las versiones instaladas por cualquiera de las dos herramientas deberían funcionar.

## nvm.fish vs nvm (la versión Bash)

| | nvm.fish | nvm (Bash) |
|---|---|---|
| Soporte de shell | Solo Fish | Bash, Zsh |
| Escrito en | Fish | Bash/POSIX sh |
| Instalación | Plugin de Fisher | Script con curl |
| Impacto en arranque | Mínimo (carga diferida) | Puede agregar 200-500ms |
| Soporte de `.nvmrc` | Sí | Sí |
| Completado con Tab | Sí (nativo de Fish) | Básico |
| Nombres clave LTS | Sí | Sí |

La diferencia de rendimiento merece mencionarse. El nvm basado en Bash es conocido por ralentizar el arranque del shell porque necesita cargarse con source en cada nueva sesión. nvm.fish carga de forma diferida — solo se activa cuando realmente ejecutas `nvm` o cambias a un directorio con `.nvmrc`. No lo notarás en tu tiempo de arranque.

## nvm.fish vs fnm vs Volta

Hay otros gestores de versiones de Node que funcionan con Fish:

**fnm** (Fast Node Manager) — escrito en Rust, funciona con cualquier shell. Es más rápido que nvm.fish para instalaciones porque usa descargas paralelas. Instálalo con `brew install fnm` o `cargo install fnm`, luego agrega `fnm env --use-on-cd --shell fish | source` a tu config.fish.

**Volta** — también basado en Rust, también cross-shell. Su principal diferenciador es la gestión de paquetes globales por proyecto. Instálalo con `curl https://get.volta.sh | bash`, luego agrega `set -gx VOLTA_HOME ~/.volta; fish_add_path $VOLTA_HOME/bin` a config.fish.

Yo uso nvm.fish porque es Fish puro, se integra con Fisher, y no necesito las funciones extra de fnm o Volta. Si usas múltiples shells, fnm o Volta son mejores opciones ya que funcionan en todos lados.

## Solución de problemas

**`nvm: command not found`** — Fisher no se instaló correctamente, o tu shell no se ha recargado. Ejecuta `fisher list` para verificar si aparece `jorgebucaran/nvm.fish`. Prueba abriendo una nueva terminal.

**Node no se encuentra después de instalar** — Asegúrate de haber ejecutado `nvm use <version>` después de instalar. O configura una versión por defecto: `set --universal nvm_default_version lts`.

**`.nvmrc` no se lee automáticamente** — nvm.fish lee `.nvmrc` cuando ejecutas `nvm install` o `nvm use` sin argumentos. Para el cambio automático al hacer `cd`, asegúrate de usar una versión reciente de nvm.fish (`fisher update jorgebucaran/nvm.fish`).

## Guías relacionadas

- [Instalar Fish Shell en Ubuntu](/es/instalar-fish-shell-ubuntu/) — configura Fish primero
- [Fish Shell en macOS](/es/fish-shell-macos-configuracion/) — configuración en Mac incluyendo Node con Homebrew
- [Mejores plugins de Fish Shell](/es/mejores-plugins-fish-shell/) — nvm.fish y otros plugins recomendados
- [Guía de funciones en Fish Shell](/es/fish-shell-funciones-comandos-personalizados/) — crea tus propias funciones auxiliares para Node