Home / Herramientas / Modos de Vim explicados: guía práctica para editar como un experto
Modos de Vim explicados: guía práctica para editar como un experto

Modos de Vim explicados: guía práctica para editar como un experto

22 October 2026 · 19 min de lectura ··

El editor que funciona distinto a todos los demás

Casi todo el mundo que se ha asomado a la terminal de Linux tiene una anécdota con Vim. Abres un archivo de configuración con vim, empiezas a escribir y el texto no aparece donde esperas, o se borran líneas que no querías tocar, o directamente no encuentras la forma de salir. La broma de que nadie sabe cómo cerrar Vim existe por una buena razón: Vim no se comporta como los editores a los que estamos acostumbrados.

La causa de esa sorpresa inicial es también la clave de su potencia. Vim es un editor de texto modal: el mismo teclado hace cosas distintas según el modo en el que te encuentres. En un modo, las teclas escriben texto; en otro, mueven el cursor, borran, copian o transforman lo que ya existe. Una vez que se entiende esta idea, Vim pasa de ser un obstáculo a convertirse en una de las herramientas de edición más rápidas que existen.

Vim sigue muy vivo. Su versión actual es la 9.2, que incorporó mejoras de autocompletado y soporte para Wayland, y está instalado en prácticamente cualquier servidor Linux o Unix, lo que lo convierte en una habilidad útil incluso para quien usa otro editor a diario. Además, su forma de editar se ha extendido mucho más allá del propio programa: Neovim, su derivado moderno, tiene una comunidad enorme, y editores como Visual Studio Code, los IDE de JetBrains, Zed o incluso los navegadores ofrecen modos de emulación de Vim.

En esta guía vamos a recorrer los modos de Vim uno por uno, aprender los comandos esenciales de cada uno, entender cómo se combinan para editar con rapidez y ver una configuración básica para empezar con buen pie. También repasaremos los errores más habituales de quienes empiezan.

Abrir, guardar y salir

Antes de entrar en los modos, conviene saber lo más básico: abrir un archivo y salir de él. Para abrir o crear un archivo, basta con pasar su nombre:

vim notas.md

Si el archivo no existe, Vim lo creará al guardar. Para salir, primero asegúrate de estar en el modo normal pulsando Esc y después escribe uno de estos comandos, que aparecerán en la parte inferior de la pantalla, y pulsa Enter:

:w          " guardar
:q          " salir si no hay cambios pendientes
:wq         " guardar y salir
:x          " guardar solo si hay cambios y salir
:q!         " salir descartando los cambios
:wa         " guardar todos los archivos abiertos
:qa!        " salir de todo sin guardar

En el modo normal también existen atajos equivalentes: ZZ guarda y sale, y ZQ sale sin guardar.

Si intentas salir con :q habiendo cambios sin guardar, Vim se negará y mostrará este aviso:

E37: No write since last change (add ! to override)

Es una protección para no perder trabajo. Decide si quieres guardar con :wq o descartar con :q!.

Si es tu primera vez, el comando vimtutor abre un tutorial interactivo incluido con Vim que se completa en unos treinta minutos y es la mejor forma de practicar lo que veremos:

vimtutor es

Qué significa que Vim sea modal

En un editor convencional, el teclado siempre escribe texto. Para cualquier otra acción, como seleccionar, copiar o mover el cursor por palabras, hay que recurrir al ratón o a combinaciones con Ctrl, Alt o Shift.

Vim parte de una observación distinta: los programadores pasan mucho más tiempo leyendo, navegando y modificando texto existente que escribiendo texto nuevo. Por eso dedica un modo entero, el normal, a esas tareas, y en él cada tecla es un comando. La w salta a la siguiente palabra, la d borra, la y copia y la p pega, todo sin pulsar teclas modificadoras ni mover las manos de la fila central del teclado.

Los modos principales son:

  • Normal: navegar y ejecutar comandos de edición. Es el modo por defecto.
  • Inserción: escribir texto como en cualquier editor.
  • Visual: seleccionar texto para operar sobre él.
  • Línea de comandos: ejecutar comandos que empiezan por :, / o ?.
  • Reemplazo: sobrescribir el texto existente carácter a carácter.

La tecla Esc es la puerta de vuelta al modo normal desde cualquier otro. Como alternativa, Ctrl + [ hace lo mismo y resulta más cómoda en algunos teclados. Muchos usuarios reasignan también la tecla Bloq Mayús para que actúe como Esc, ya que está mucho más a mano.

Para saber en qué modo estás, fíjate en la parte inferior izquierda de la pantalla: Vim muestra -- INSERT --, -- VISUAL -- o -- REPLACE -- según corresponda. Si no aparece nada, estás en el modo normal.

El modo normal: moverse sin tocar el ratón

El modo normal es donde pasarás la mayor parte del tiempo. Su primer cometido es mover el cursor con precisión y rapidez.

Los movimientos básicos usan las teclas de la fila central para la mano derecha:

h   izquierda
j   abajo
k   arriba
l   derecha

Las flechas del teclado también funcionan, pero usar h, j, k y l evita mover la mano y, con la práctica, resulta mucho más rápido.

Casi todos los movimientos aceptan un número delante que indica cuántas veces repetirlos. 5j baja cinco líneas y 3k sube tres. Activar los números de línea relativos, como veremos en la configuración, hace que estos saltos sean inmediatos.

Para moverse por palabras y líneas:

w       inicio de la siguiente palabra
b       inicio de la palabra anterior
e       final de la palabra actual o siguiente
W B E   igual, pero considerando palabra todo lo separado por espacios
0       inicio de la línea
^       primer carácter no blanco de la línea
$       final de la línea

La diferencia entre w y W se ve bien con código. En usuario.nombre = "Ana", la w se detiene en usuario, en el punto, en nombre, en el signo igual y en las comillas; la W salta directamente de usuario.nombre al signo igual, porque solo considera los espacios como separadores.

Para desplazarse por el archivo completo:

gg          primera línea del archivo
G           última línea
42G         línea 42 (también con :42)
Ctrl + d    media pantalla hacia abajo
Ctrl + u    media pantalla hacia arriba
%           saltar al paréntesis, corchete o llave que hace pareja

Y para saltar a un carácter concreto dentro de la línea, una de las técnicas más útiles:

f(      salta al siguiente paréntesis de apertura
t,      salta justo antes de la siguiente coma
F"      salta a las comillas anteriores
;       repite el último salto f o t
,       repite el último salto en dirección contraria

Buscar es otra forma de moverse. / busca hacia delante y ? hacia atrás; n y N saltan a la siguiente y a la anterior coincidencia, y * busca la palabra que hay bajo el cursor.

/conexion

Editar desde el modo normal

El modo normal no sirve solo para moverse: también es donde se realizan la mayoría de las ediciones, sin pasar por el modo de inserción.

Los comandos más básicos actúan sobre un carácter o una línea:

x       borrar el carácter bajo el cursor
r       reemplazar el carácter bajo el cursor por el siguiente que pulses
dd      borrar la línea completa
yy      copiar la línea completa
p       pegar después del cursor o debajo de la línea
P       pegar antes del cursor o encima de la línea
J       unir la línea actual con la siguiente
~       cambiar entre mayúsculas y minúsculas
u       deshacer
Ctrl+r  rehacer
.       repetir el último cambio

En Vim, borrar equivale a cortar: lo que eliminas con d o x se guarda y puedes pegarlo después con p. Así, ddp intercambia la línea actual con la siguiente, y xp intercambia dos caracteres, útil para corregir erratas como teh.

El historial de deshacer de Vim es muy potente. Además de u y Ctrl + r, permite volver al estado que tenía el archivo hace un tiempo:

:earlier 10m    " estado de hace diez minutos
:later 5m       " avanzar cinco minutos

La gramática de los comandos de Vim

Lo que hace a Vim realmente eficiente no es la cantidad de atajos, sino la forma en que se combinan. Los comandos de edición siguen una gramática de verbos y objetos, como un pequeño lenguaje: un operador, que es el verbo, seguido de un movimiento u objeto de texto, que indica sobre qué actúa.

Los operadores más comunes son:

d   borrar (delete)
c   cambiar: borrar y pasar al modo inserción (change)
y   copiar (yank)
>   indentar
<   quitar indentación
gU  convertir a mayúsculas
gu  convertir a minúsculas

Y cualquier movimiento sirve como objeto. Combinándolos:

dw      borrar hasta el inicio de la siguiente palabra
d$      borrar hasta el final de la línea (equivale a D)
c0      cambiar desde el cursor hasta el inicio de la línea
y3j     copiar la línea actual y las tres siguientes
dt)     borrar hasta justo antes del paréntesis de cierre
gUiw    convertir a mayúsculas la palabra actual
>G      indentar desde la línea actual hasta el final

Los objetos de texto amplían esta gramática. Se forman con i, de inner, que selecciona el interior, o con a, de around, que incluye los delimitadores o el espacio que rodea:

ciw     cambiar la palabra bajo el cursor
daw     borrar la palabra y el espacio que la rodea
ci"     cambiar el texto entre comillas
da(     borrar los paréntesis y su contenido
yi{     copiar el contenido de un bloque entre llaves
dit     borrar el contenido de una etiqueta HTML
cip     cambiar el párrafo actual

Imagina que el cursor está en cualquier punto de esta línea:

const mensaje = enviarCorreo("[email protected]", plantillaBienvenida);

Con ci" borras la dirección de correo y quedas en modo inserción entre las comillas, listo para escribir la nueva, aunque el cursor no estuviera dentro de ellas: Vim busca las siguientes comillas de la línea. Con ci( reemplazas todos los argumentos de la función. En un editor convencional, cualquiera de las dos operaciones requeriría seleccionar con el ratón o con varias combinaciones de teclas.

Esta gramática es componible: cuando aprendes un nuevo movimiento, funciona automáticamente con todos los operadores que ya conoces, y viceversa. Por eso el aprendizaje de Vim se acelera con el tiempo.

El comando punto y las repeticiones

El punto, ., repite el último cambio completo, y es uno de los comandos más potentes de Vim. Combinado con la búsqueda, permite hacer ediciones repetitivas con muy pocas pulsaciones.

Supongamos que quieres cambiar algunas apariciones de usuario por cliente, pero no todas:

/usuario<Enter>     buscar la primera aparición
ciwcliente<Esc>     cambiar la palabra
n                   ir a la siguiente aparición
.                   repetir el cambio si procede
n                   saltar a la siguiente sin cambiarla

Para cambios más complejos que afectan a varias líneas, Vim permite grabar macros. Con qa empiezas a grabar en el registro a, haces la edición, pulsas q para terminar y luego @a la reproduce. 10@a la repite diez veces.

qa          empezar a grabar en el registro a
0           ir al inicio de la línea
i- <Esc>    insertar un guion y un espacio
j           bajar a la siguiente línea
q           detener la grabación
5@a         repetir la macro en las cinco líneas siguientes

Este ejemplo convierte un grupo de líneas en una lista de Markdown en segundos.

El modo de inserción: escribir texto

En el modo de inserción, Vim se comporta como un editor convencional: lo que escribes aparece en el documento. Hay varias formas de entrar en él, y elegir la adecuada ahorra movimientos:

i   insertar antes del cursor
a   insertar después del cursor
I   insertar al inicio de la línea (primer carácter no blanco)
A   insertar al final de la línea
o   abrir una línea nueva debajo e insertar
O   abrir una línea nueva encima e insertar
s   borrar el carácter actual e insertar
S   borrar la línea completa e insertar

Por ejemplo, para añadir un punto y coma al final de una línea de código, no hace falta llevar el cursor hasta allí: A; seguido de Esc lo resuelve desde cualquier posición de la línea.

Dentro del modo de inserción hay algunos atajos útiles que evitan volver al modo normal para correcciones pequeñas:

Ctrl + w    borrar la palabra anterior
Ctrl + u    borrar hasta el inicio de la línea
Ctrl + n    autocompletar con palabras del documento
Ctrl + o    ejecutar un único comando del modo normal y volver

Una buena práctica es no quedarse en el modo de inserción más de lo necesario. Escribe el texto, pulsa Esc y vuelve al modo normal para navegar o hacer el siguiente cambio. Además, cada entrada y salida del modo de inserción forma una unidad de deshacer, de modo que u deshará exactamente ese bloque de texto.

El modo visual: seleccionar para actuar

El modo visual permite seleccionar texto y aplicar después un operador sobre la selección. Es útil cuando el bloque que quieres modificar no coincide con ningún movimiento u objeto de texto, o cuando prefieres ver la selección antes de actuar.

Hay tres variantes:

v           visual por caracteres
V           visual por líneas completas
Ctrl + v    visual por bloques rectangulares

Una vez seleccionado el texto con los movimientos habituales, aplicas un operador: d para borrar, y para copiar, c para cambiar, > para indentar, U para mayúsculas o : para ejecutar un comando sobre las líneas seleccionadas. Con o el cursor salta al otro extremo de la selección para ampliarla por ese lado, y gv vuelve a seleccionar lo último que seleccionaste.

El modo visual por bloques es especialmente potente para editar columnas. Imagina esta lista de variables a la que quieres añadir export delante:

API_URL=https://api.tienda.example
API_TIMEOUT=30
API_REINTENTOS=3

Sitúa el cursor al inicio de la primera línea, pulsa Ctrl + v, baja con 2j para seleccionar la primera columna de las tres líneas, pulsa I, escribe export y termina con Esc. El texto se insertará en todas las líneas a la vez:

export API_URL=https://api.tienda.example
export API_TIMEOUT=30
export API_REINTENTOS=3

Del mismo modo, A añade texto al final del bloque seleccionado y $A lo añade al final de cada línea, aunque tengan longitudes distintas.

El modo de línea de comandos

Al pulsar : en el modo normal, el cursor baja a la última línea de la pantalla y puedes escribir comandos Ex, la herencia del editor ex del que deriva Vim. Ya hemos visto los de guardar y salir; estos son otros especialmente útiles:

:e config.yaml      " abrir otro archivo
:sp archivo.txt     " abrir en una ventana dividida horizontalmente
:vsp archivo.txt    " abrir en una ventana dividida verticalmente
:42                 " ir a la línea 42
:set number         " mostrar números de línea
:noh                " quitar el resaltado de la última búsqueda
:r !date            " insertar la salida de un comando del sistema
:!ls                " ejecutar un comando del sistema sin salir
:help w             " ayuda sobre el comando w

El comando más conocido de este modo es la sustitución, que permite sustituir texto en todo el archivo o en un rango de líneas con expresiones regulares. Su estructura es :rango s/patrón/reemplazo/opciones:

:s/http/https/          " primera aparición en la línea actual
:s/http/https/g         " todas las apariciones en la línea actual
:%s/http/https/g        " todas las apariciones en todo el archivo
:%s/http/https/gc       " igual, pero pidiendo confirmación en cada una
:10,20s/foo/bar/g       " solo entre las líneas 10 y 20
:'<,'>s/;$//            " en la selección visual, quitar el punto y coma final

El símbolo % representa todas las líneas, la g final aplica el cambio a todas las coincidencias de cada línea y no solo a la primera, y la c pide confirmación. Cuando entras en el modo de comandos desde una selección visual, Vim escribe automáticamente '<,'>, el rango de la selección.

Las expresiones regulares con grupos permiten transformaciones más complejas. Este ejemplo convierte fechas en formato 2026-10-17 a 17/10/2026:

:%s/\v(\d{4})-(\d{2})-(\d{2})/\3\/\2\/\1/g

El prefijo \v activa el modo very magic, en el que los paréntesis y las llaves funcionan como en la mayoría de motores de expresiones regulares, sin necesidad de escaparlos.

Otro comando muy útil es :g, que ejecuta una acción sobre todas las líneas que coinciden con un patrón:

:g/console.log/d        " borrar todas las líneas con console.log
:g/^$/d                 " borrar las líneas vacías
:v/ERROR/d              " borrar todas las líneas que NO contienen ERROR

El modo de reemplazo

El modo de reemplazo se activa con R mayúscula desde el modo normal. En él, cada carácter que escribes sobrescribe el que hay bajo el cursor, en lugar de insertarse, de forma similar a la tecla Insert de algunos editores.

Es útil para modificar texto de longitud fija, como columnas alineadas en una tabla, valores en un archivo de ancho fijo o números de versión:

version = "2.4.1"

Con el cursor sobre el 4, R7 seguido de Esc convierte la línea en version = "2.7.1" sin alterar la alineación. Si pulsas la tecla de retroceso en este modo, Vim restaura el carácter original en lugar de borrarlo.

Para cambiar un solo carácter, no hace falta entrar en este modo: r minúscula, seguido del carácter nuevo, lo reemplaza y vuelve inmediatamente al modo normal.

Registros, ventanas y búferes

Algunas funciones de Vim que se apoyan en los modos y que conviene conocer pronto son los registros y la gestión de varios archivos.

Los registros son las memorias en las que Vim guarda el texto copiado o borrado. Hay muchos, y se seleccionan con comillas dobles seguidas del nombre del registro antes del comando:

"ayy    copiar la línea en el registro a
"ap     pegar el contenido del registro a
"+y     copiar al portapapeles del sistema
"+p     pegar desde el portapapeles del sistema
"0p     pegar lo último copiado, aunque después hayas borrado algo

El registro 0 resuelve una frustración habitual: copias una línea con yy, borras otra con dd para hacer sitio y, al pegar con p, aparece lo borrado en lugar de lo copiado. Con "0p recuperas lo que copiaste. El comando :reg muestra el contenido de todos los registros.

Para trabajar con varios archivos, Vim usa búferes, que son los archivos abiertos, y ventanas, que son las vistas en pantalla:

:ls             " listar los búferes abiertos
:b 2            " cambiar al búfer 2
:bn             " siguiente búfer
:vsp            " dividir la ventana verticalmente

Para moverte entre ventanas divididas, usa Ctrl + w seguido de la dirección: h, j, k o l.

Una configuración básica para empezar

Vim se configura con un archivo llamado .vimrc en tu carpeta personal, o _vimrc en Windows. Neovim usa su propio archivo init.lua o init.vim dentro de ~/.config/nvim. Esta es una configuración mínima que mejora mucho la experiencia inicial:

" ~/.vimrc
set nocompatible
syntax on
filetype plugin indent on

set number              " números de línea
set relativenumber      " números relativos para saltos como 5j
set cursorline          " resaltar la línea actual
set showmode            " mostrar el modo actual
set showcmd             " mostrar el comando que se está escribiendo

set expandtab           " usar espacios en lugar de tabuladores
set shiftwidth=4
set tabstop=4

set ignorecase          " búsquedas sin distinguir mayúsculas
set smartcase           " salvo si el patrón incluye mayúsculas
set incsearch           " resaltar mientras escribes la búsqueda
set hlsearch            " resaltar todas las coincidencias

set clipboard=unnamedplus   " usar el portapapeles del sistema
set undofile                " conservar el historial de deshacer al cerrar

let mapleader = " "
nnoremap <leader>w :w<CR>
nnoremap <leader>h :nohlsearch<CR>
inoremap jk <Esc>

La última línea es un truco popular: pulsar jk rápidamente en el modo de inserción vuelve al modo normal, sin estirar la mano hasta Esc.

Con el tiempo, el directorio de configuración suele crecer con complementos y archivos específicos por tipo de archivo. Una estructura habitual en Vim es esta:

~/.vim
├── vimrc
├── after
│   └── ftplugin
│       ├── python.vim
│       └── markdown.vim
├── pack
│   └── plugins
│       └── start
│           └── vim-surround
└── undo

Vim incluye un sistema de paquetes nativo: cualquier complemento colocado en pack/*/start se carga automáticamente, sin necesidad de gestores externos.

Vim, Neovim y los modos Vim en otros editores

Vim no es la única forma de usar la edición modal. Neovim nació en 2014 como una bifurcación de Vim con el objetivo de modernizar su base de código. Se configura con Lua, integra de serie un cliente del protocolo LSP para autocompletado y diagnósticos de cualquier lenguaje, y usa Tree-sitter para un resaltado de sintaxis más preciso. Su ecosistema de complementos es muy activo y es la opción preferida por quienes quieren convertir el editor de terminal en un entorno de desarrollo completo.

Vim, por su parte, prioriza la estabilidad y la compatibilidad, está disponible prácticamente en cualquier sistema y tiene su propio lenguaje de configuración, Vim9 script, más rápido y moderno que el clásico.

Si no quieres abandonar tu editor actual, puedes aprovechar todo lo aprendido con las extensiones de emulación: VSCodeVim o la integración con Neovim en Visual Studio Code, IdeaVim en los IDE de JetBrains y el modo Vim integrado en Zed. Incluso existen extensiones para navegadores, como Vimium, que permiten navegar por la web con atajos de Vim.

En los servidores, aunque no uses Vim como editor principal, conocer sus modos te permitirá editar archivos de configuración con soltura cuando solo tengas una sesión SSH. En instalaciones mínimas a veces solo está disponible vi, que comparte los fundamentos.

Errores frecuentes al empezar con Vim

El primero es escribir texto en el modo normal. Si empiezas a teclear sin entrar antes en el modo de inserción, cada letra se interpreta como un comando y pueden ocurrir cambios inesperados. Pulsa Esc y luego u varias veces para deshacerlos.

El segundo es quedarse en el modo de inserción y navegar con las flechas. Funciona, pero desaprovecha la principal ventaja de Vim. Acostúmbrate a volver al modo normal en cuanto termines de escribir.

El tercero es pulsar Ctrl + s por costumbre para guardar. En muchas terminales esto congela la salida, y parece que Vim se ha bloqueado. Pulsa Ctrl + q para desbloquearla y guarda con :w.

El cuarto es abrir un archivo del sistema sin permisos y descubrirlo al intentar guardar:

E45: 'readonly' option is set (add ! to override)

O, si el archivo pertenece a otro usuario:

"/etc/hosts" E212: Can't open file for writing

Puedes guardar con privilegios desde Vim usando :w !sudo tee %, aunque lo más recomendable es abrir esos archivos con sudoedit, que usa una copia temporal y es más seguro.

El quinto es encontrarse con el aviso de archivo de intercambio al abrir un archivo:

E325: ATTENTION
Found a swap file by the name ".notas.md.swp"

Significa que el archivo ya está abierto en otra sesión de Vim o que una sesión anterior se cerró de forma inesperada. Si es lo segundo, elige recuperar con R para revisar los cambios no guardados y después borra el archivo .swp.

El sexto es intentar aprenderlo todo a la vez. Vim tiene cientos de comandos, pero con una veintena se puede trabajar con soltura. Aprende primero los movimientos básicos, los modos de inserción y los operadores d, c e y, y añade un comando nuevo cada pocos días.

Conclusiones

Vim es un editor modal, y entender sus modos es la clave para dejar de pelearse con él. El modo normal, el predeterminado, está pensado para navegar y modificar texto con comandos de una o pocas teclas; el de inserción, para escribir; el visual, para seleccionar y actuar sobre la selección; el de línea de comandos, para guardar, salir, buscar y sustituir; y el de reemplazo, para sobrescribir texto existente. La tecla Esc siempre devuelve al modo normal.

La verdadera potencia de Vim no está en memorizar atajos, sino en su gramática: operadores como d, c e y se combinan con movimientos y objetos de texto como w, $, iw o i" para expresar ediciones complejas con muy pocas pulsaciones. El comando punto, las macros, los registros y la sustitución con expresiones regulares multiplican esa eficiencia en tareas repetitivas.

Con una configuración básica en el archivo .vimrc, vimtutor para practicar y paciencia durante las primeras semanas, la edición modal se vuelve natural. Y aunque acabes usando Neovim o un modo de emulación en tu editor habitual, lo aprendido seguirá siendo útil, tanto en tu máquina como en cualquier servidor al que te conectes por SSH.