Comandos vi de Linux: los 3 modos de Vim y el modo visual

Abrir vi y ver que no se escribe nada, o cerrar la ventana porque no sabes cómo salir: casi todo el que toca un servidor por primera vez pasa por esto alguna vez. El comando vi de Linux, que separa el modo normal del modo inserción, solo pide saber en qué modo estás; lo demás son unas pocas teclas. En este artículo resumo en tablas los tres modos y los comandos de cada uno, y puedes probar vi tú mismo en un servidor virtual dentro del navegador.
En AlmaLinux 9.8, vi y vim vienen del paquete vim 8.2, y las pantallas y mensajes de este artículo se abrieron con vim. Si no está instalado, instálalo con [dnf -y install vim-enhanced].
✅ Los tres modos de vi
En vi, la misma tecla hace cosas distintas según el modo. El archivo se abre en modo normal; con i entras en modo inserción para escribir, con Esc vuelves y con dos puntos [:] pasas al modo última línea para guardar y salir.
| Modo | Tecla para entrar | Tarea |
|---|---|---|
| Modo normal | vi empieza aquí · Esc desde otro modo | Mover el cursor, borrar, copiar, pegar, deshacer |
| Modo inserción | i a I A o O | Escribir texto. Abajo aparece [-- INSERT --] |
| Modo última línea | : | Guardar, salir, sustituir, números de línea. Abajo aparece : |
| Modo visual | v V Ctrl-v | Seleccionar un rango y luego borrar, copiar o insertar en bloque |
Hay tres formas de abrir un archivo desde la consola.
| Comando | Descripción |
|---|---|
| vi archivo | Abre el archivo en modo normal. Si no existe, lo crea y muestra [New] |
| vi +20 archivo | Abre con el cursor en la línea 20 |
| view archivo= vi -R | Abre en solo lectura. Al editar sale el aviso [W10] y al guardar, [E45] |
Escribe [vi httpd.conf] en el servidor virtual de abajo para abrir vi; el menú de la izquierda pasa a mostrar los comandos de vi. Al pulsar un chip, esa tecla entra en la pantalla, y también puedes escribirla con el teclado.
✅ Resumen de comandos vi de Linux
🔲 Mover el cursor
| Tecla | Descripción |
|---|---|
| h j k l← ↓ ↑ → | Mover un carácter. También con las flechas |
| 0 · ^ | Inicio de línea (0) · primer carácter no blanco (^) |
| $ | Fin de línea |
| w · b · e | Inicio de la palabra siguiente · inicio de la anterior · final de la siguiente |
| gg · G | Primera · última línea del archivo |
| 20Gigual que :20 | Ir a la línea 20. Cambia el número para ir a otra |
| H · M · L | Línea superior · central · inferior de la pantalla |
| Ctrl-f · Ctrl-b | Una pantalla abajo · arriba |
| Ctrl-d · Ctrl-u | Media pantalla abajo · arriba |
🔲 Entrar en modo inserción
Entres con la tecla que entres, pulsa Esc al terminar de escribir. cw, cc, C y s borran y pasan directamente al modo inserción, así que corregir una palabra o una línea es más rápido que pulsar x e i por separado.
| Tecla | Descripción |
|---|---|
| i · a | Escribir antes (i) · después (a) del cursor |
| I · A | Escribir al inicio (I) · al final (A) de la línea |
| o · O | Abrir una línea vacía debajo (o) · encima (O) y escribir |
| cw | Borrar desde el cursor hasta el final de la palabra y escribir |
| cc | Borrar la línea entera y escribir |
| C | Borrar desde el cursor hasta el final de la línea y escribir |
| s | Borrar un carácter y escribir |
| Esc | Terminar de escribir y volver al modo normal |
🔲 Borrar y editar
Si pones una tecla de movimiento después de d, se borra ese rango. dw borra una palabra, dd una línea y dG hasta el final del archivo; un número delante lo repite esas veces.
| Tecla | Descripción |
|---|---|
| x · X | Borrar el carácter bajo el cursor (x) · el anterior (X). 3x borra tres |
| dw | Borrar desde el cursor hasta el final de la palabra |
| dd | Borrar la línea. 3dd borra tres líneas |
| D= d$ | Borrar desde el cursor hasta el final de la línea |
| d0 | Borrar desde el inicio de la línea hasta el cursor |
| dG | Borrar desde la línea actual hasta el final del archivo |
| :6d · :6,10d | Borrar la línea 6 · borrar las líneas 6–10 |
| J | Unir la línea de abajo al final de la actual |
| r | Sustituir el carácter bajo el cursor por la siguiente tecla |
| ~ | Cambiar mayúsculas/minúsculas |
| >> · << | Sangrar · quitar sangría de la línea |
🔲 Copiar, pegar y deshacer
Lo borrado también se puede pegar con p como si se hubiera copiado, así que pulsar dd y luego p baja una línea. u retrocede varios pasos y Ctrl-r rehace lo deshecho.
| Tecla | Descripción |
|---|---|
| yy | Copiar la línea. 3yy copia tres líneas |
| yw | Copiar desde el cursor hasta el final de la palabra |
| p · P | Pegar debajo (p) · encima (P). Si se copiaron caracteres, tras · antes del cursor |
| :1 co 7igual que :1 t 7 | Copiar la línea 1 debajo de la 7 |
| :1,7 co 8 | Copiar las líneas 1–7 debajo de la 8 |
| :1 m 8 | Mover la línea 1 debajo de la 8 |
| u | Deshacer. Púlsalo varias veces para seguir retrocediendo |
| Ctrl-r | Rehacer lo deshecho |
| . | Repetir el último cambio |
🔲 Buscar y sustituir
La sustitución se hace en el modo última línea. Sin rango afecta solo a la línea actual, con [%] a todo el archivo, y sin g al final solo cambia la primera coincidencia de cada línea.
| Tecla | Descripción |
|---|---|
| /texto | Buscar hacia abajo desde el cursor. Al llegar al final sigue desde el principio: [search hit BOTTOM, continuing at TOP] |
| ?texto | Buscar hacia arriba desde el cursor |
| n · N | Siguiente resultado en la misma dirección (n) · en la contraria (N) |
| * | Buscar hacia abajo la palabra bajo el cursor |
| :s/old/new/ | El primer old de la línea actual por new |
| :s/old/new/g | Todos los old de la línea actual por new |
| :%s/old/new/g | Todos los old del archivo por new |
| :10,20s/old/new/g | Todos los old de las líneas 10–20 por new |
| :%s/old/new/gc | Preguntar en cada cambio (y cambiar · n saltar · a todos · q salir) |
🔲 Guardar, salir y números de línea
| Tecla | Descripción |
|---|---|
| :w | Guardar. Al terminar: [36L, 1094B written] |
| :w archivo | Guardar con otro nombre. El archivo original no cambia |
| :wq= :x = ZZ | Guardar y salir |
| :q | Salir. Si hay cambios sin guardar: [E37: No write since last change] |
| :q! | Salir sin guardar |
| :set nu · :set nonu | Mostrar · ocultar números de línea |
✅ Comentar una columna de golpe con el modo bloque visual de Vim
Para poner el mismo texto al inicio de varias líneas, usa el modo bloque visual en lugar de pulsar i en cada línea. En modo normal, v selecciona por caracteres, Shift-v por líneas y Ctrl-v por columnas.
Así se comenta de una vez un bloque de un archivo de configuración. Pon el cursor en el primer carácter de la primera línea, pulsa Ctrl-v, baja con j para seleccionar las líneas, luego pulsa I, escribe # y pulsa Esc.



Para quitar los comentarios se hace igual. Sobre el # de la primera línea, selecciona hacia abajo con Ctrl-v y pulsa x: la columna seleccionada se borra de una vez. Puedes probarlo tal cual con vhost.conf en el simulador de arriba.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.