En esta página
Vim: lo esencial para editar sin mouse
Vim es un editor de texto que funciona dentro de la terminal. No es "un editor con atajos raros": es un lenguaje para editar texto. Una vez que entiendes su gramática, deja de ser memorización y pasa a ser composición.
Este documento no pretende cubrir todo Vim. Cubre lo que se usa todos los días y las palabras que necesitas para entender el resto cuando lo veas.
La filosofía en tres ideas
- Modal: no escribes y editas al mismo tiempo. En el modo normal las teclas son comandos; en el modo inserción son texto.
- Componible: cada comando es
operador + movimiento.d(borrar) +w(palabra) =dw. No hay que memorizardwcomo caso especial: se deduce. - Las manos no se mueven: todo se hace desde el teclado, sin mouse y sin soltar las teclas de inicio.
La consecuencia práctica: al principio vas a ser más lento. Es normal. La curva sube después de una o dos semanas de uso diario.
Palabras que van a aparecer
Si nunca usaste un editor de este estilo, estas definiciones te ahorran mucha confusión:
| Palabra | Qué es |
|---|---|
| archivo | el documento en el disco, por ejemplo main.c |
| buffer | el contenido de un archivo cargado en memoria mientras lo editas. Vim puede tener muchos buffers abiertos aunque no los veas todos. |
| ventana | un recuadro de la pantalla que muestra un buffer. Puedes tener dos ventanas mostrando el mismo buffer. |
| pestaña | una forma de agrupar ventanas. Cambiar de pestaña cambia el conjunto de ventanas visible. |
| modo | el estado actual del editor: normal, inserción, visual, comando. Define qué hacen las teclas. |
| comando | una instrucción que Vim ejecuta, como :w (guardar) o dd (borrar línea). |
| registro | el "portapapeles" interno de Vim. Cuando copias (yy), el texto va ahí. |
| macro | una grabación de teclas que después puedes repetir. No es un lenguaje: Vim graba lo que haces y lo reproduce. |
| función | en programación, un bloque de código con nombre que se puede ejecutar varias veces. Vim no te obliga a escribir funciones para usarlo; si ves function en una configuración avanzada, es eso. |
| atajo | una combinación de teclas que ejecuta un comando, por ejemplo Ctrl+R para rehacer. |
No hace falta memorizar esta tabla. Vuelve a ella cuando aparezca una palabra que no conozcas.
Modos
| Modo | Cómo entras | Qué hacen las teclas |
|---|---|---|
| Normal | Esc | son comandos (el modo en el que quieres estar) |
| Inserción | i, a, o, O | escriben texto |
| Visual | v | seleccionan caracteres |
| Visual línea | V | seleccionan líneas enteras |
| Comando | : | comandos de Vim (:w, :q, :s/...) |
| Reemplazo | R | escriben pisando texto existente |
Si no sabes en qué modo estás: aprieta Esc. Siempre te devuelve a normal.
El kit de supervivencia
| Tecla | Acción |
|---|---|
i | insertar antes del cursor |
a | insertar después del cursor |
o | abrir línea abajo y entrar a inserción |
O | abrir línea arriba |
Esc | volver a normal |
:w | guardar |
:q | salir |
:wq o ZZ | guardar y salir |
:q! | salir sin guardar |
u | deshacer |
Ctrl+R | rehacer |
dd | borrar la línea |
yy | copiar la línea |
p | pegar |
Con eso ya puedes editar. El resto es mejorar.
Moverse
| Tecla | A dónde va |
|---|---|
h j k l | izquierda, abajo, arriba, derecha |
w / b | siguiente / anterior palabra |
e | final de la palabra |
0 / $ | inicio / final de la línea |
gg / G | principio / final del archivo |
Ctrl+D / Ctrl+U | media pantalla abajo / arriba |
{ / } | párrafo anterior / siguiente |
No uses las flechas: te obligan a mover la mano. h j k l parece incómodo dos
días y después ya no quieres otra cosa.
Editar: operador + movimiento
La gramática es:
[cantidad] operador [cantidad] movimiento
| Operador | Qué hace |
|---|---|
d | delete: borra |
c | change: borra y entra a inserción |
y | yank: copia |
Combinaciones que vas a usar todo el tiempo:
| Comando | Se lee | Resultado |
|---|---|---|
dw | borrar palabra | borra desde el cursor hasta la próxima palabra |
d$ | borrar hasta el final | borra el resto de la línea |
dd | borrar línea | borra la línea completa |
2dd | borrar 2 líneas | dos líneas |
cw | cambiar palabra | borra la palabra y entra a insertar |
yy | copiar línea | va al registro |
p / P | pegar después / antes | pega |
ggdG | borrar todo | archivo vacío (con u se recupera) |
Los números se pueden poner antes o después del operador: 3dw y d3w hacen lo
mismo. Elige uno y sé consistente.
El punto (.) repite el último cambio. Es el atajo más rentable de Vim: haces
una edición una vez y la repites con una tecla.
Text objects: editar "por dentro"
Un text object es una región que Vim entiende: una palabra, lo que está
entre comillas, lo que está entre paréntesis. Se usa después de un operador y
empieza con i (inner, por dentro) o a (around, incluyendo).
| Escribís | Qué hace |
|---|---|
ciw | cambia la palabra bajo el cursor |
ci" | cambia lo que está dentro de las comillas |
di( | borra lo que está dentro de los paréntesis |
yap | copia el párrafo completo |
>i{ | indenta el bloque entre llaves |
ciw es probablemente el comando que más vas a usar: renombrar una variable
sin ir carácter por carácter. No hace falta memorizar la tabla completa; con
estos cinco alcanza para empezar.
Seleccionar (modo visual)
v entra a modo visual: te mueves y seleccionas. Después un operador actúa
sobre la selección.
v3j → selecciona 4 líneas hacia abajo
v} → selecciona hasta el final del párrafo
V → selecciona la línea completa
gv → vuelve a seleccionar lo último
Si Ctrl+V te pega en vez de seleccionar, tu terminal lo intercepta. En Vim
suele funcionar Ctrl+Q para el modo bloque.
Buscar y reemplazar
| Comando | Qué hace |
|---|---|
/texto | busca hacia adelante |
?texto | busca hacia atrás |
n / N | siguiente / anterior resultado |
:noh | apaga el resaltado de búsqueda |
Reemplazos:
:s/viejo/nuevo/ " primera ocurrencia de la línea
:s/viejo/nuevo/g " todas las de la línea
:%s/viejo/nuevo/g " todo el archivo
:%s/viejo/nuevo/gc " pide confirmación en cada una
Desde visual, seleccionas y aprietas :: Vim escribe el rango solo.
Ventanas, buffers y pestañas
Esto suena complicado y no lo es si separas las tres ideas:
- Un buffer es un archivo cargado en memoria.
- Una ventana es un recuadro que muestra un buffer.
- Una pestaña es un conjunto de ventanas.
Puedes tener el mismo buffer en dos ventanas y ver dos partes del mismo archivo al mismo tiempo.
| Comando | Qué hace |
|---|---|
:e archivo | abre un archivo en un buffer |
:ls | lista los buffers abiertos |
:bnext / :bprev | siguiente / anterior buffer |
:sp archivo | divide horizontalmente |
:vs archivo | divide verticalmente |
Ctrl+W + h/j/k/l | se mueve entre ventanas |
:tabnew | nueva pestaña |
gt / gT | siguiente / anterior pestaña |
Para empezar alcanza con :sp, :vs y Ctrl+W + h/j/k/l.
Macros: grabar y repetir
Una macro es una grabación de tus teclas. Sirve para repetir una edición que haces muchas veces, sin escribir un programa.
qaempieza a grabar en el registroa.- Haces la edición (por ejemplo, borrar una línea y pasar a la siguiente).
qtermina la grabación.@ala ejecuta.@@repite la última.100@ala ejecuta 100 veces.
Es la automatización más barata que existe. Si te encuentras haciendo lo mismo diez veces, graba una macro.
Configuración mínima
En Vim: ~/.vimrc. En Neovim: ~/.config/nvim/init.lua.
set number " números de línea
set relativenumber " números relativos (para saltar con j/k)
set expandtab " Tab inserta espacios
set tabstop=4 " un tab se ve como 4 espacios
set shiftwidth=4 " indentación automática de 4
set ignorecase " búsqueda sin distinguir mayúsculas
set smartcase " ...salvo que escribas mayúsculas
set incsearch " busca mientras escribes
set hlsearch " resalta resultados
set mouse=a " mouse opcional (sí, está permitido)
No copies configuraciones de internet la primera semana. Entendé cada línea antes de agregarla.
Cómo empezar (plan realista)
| Momento | Objetivo |
|---|---|
| Día 1 | vimtutor completo (30-45 min, viene instalado) |
| Día 1 | sobrevivir: i, Esc, :wq, :q!, u |
| Semana 1 | moverse con h j k l w b 0 $ gg G |
| Semana 2 | dd, yy, p, ciw, :%s |
| Semana 3 | text objects y modo visual |
| Semana 4 | macros, ventanas y tu configuración |
vimtutor # el tutorial oficial
Regla: una cosa nueva por día. Si intentas memorizar la chuleta entera, la abandonas en tres días.
Errores típicos
| Situación | Qué pasó | Solución |
|---|---|---|
| Escribís y no aparece nada | estás en modo normal | i para insertar |
| No puedes salir | no sabes el comando | Esc, después :q! |
E37: No write since last change | hay cambios sin guardar | :w o :q! |
| Al pegar se indenta todo | autoindent interactúa con el pegado | :set paste, pega, :set nopaste |
Ctrl+V pega en vez de seleccionar | lo intercepta la terminal | Ctrl+Q |
| Perdiste una selección | — | gv |
| Borraste algo por error | — | u |
Chuleta
| Necesito | Comando |
|---|---|
| insertar | i / a / o |
| volver a normal | Esc |
| guardar y salir | :wq |
| salir sin guardar | :q! |
| deshacer / rehacer | u / Ctrl+R |
| borrar línea | dd |
| copiar / pegar | yy / p |
| cambiar palabra | ciw |
| borrar hasta el final | d$ |
| ir al inicio / final | gg / G |
| buscar | /texto + n |
| reemplazar todo | :%s/viejo/nuevo/g |
| dividir pantalla | :sp / :vs |
| grabar macro | qa ... q + @a |
| repetir último cambio | . |
Hecho con amor para Laura, por Bogdan.