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

  1. Modal: no escribes y editas al mismo tiempo. En el modo normal las teclas son comandos; en el modo inserción son texto.
  2. Componible: cada comando es operador + movimiento. d (borrar) + w (palabra) = dw. No hay que memorizar dw como caso especial: se deduce.
  3. 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:

PalabraQué es
archivoel documento en el disco, por ejemplo main.c
bufferel contenido de un archivo cargado en memoria mientras lo editas. Vim puede tener muchos buffers abiertos aunque no los veas todos.
ventanaun recuadro de la pantalla que muestra un buffer. Puedes tener dos ventanas mostrando el mismo buffer.
pestañauna forma de agrupar ventanas. Cambiar de pestaña cambia el conjunto de ventanas visible.
modoel estado actual del editor: normal, inserción, visual, comando. Define qué hacen las teclas.
comandouna instrucción que Vim ejecuta, como :w (guardar) o dd (borrar línea).
registroel "portapapeles" interno de Vim. Cuando copias (yy), el texto va ahí.
macrouna grabación de teclas que después puedes repetir. No es un lenguaje: Vim graba lo que haces y lo reproduce.
funciónen 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.
atajouna 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

ModoCómo entrasQué hacen las teclas
NormalEscson comandos (el modo en el que quieres estar)
Insercióni, a, o, Oescriben texto
Visualvseleccionan caracteres
Visual líneaVseleccionan líneas enteras
Comando:comandos de Vim (:w, :q, :s/...)
ReemplazoRescriben pisando texto existente

Si no sabes en qué modo estás: aprieta Esc. Siempre te devuelve a normal.

El kit de supervivencia

TeclaAcción
iinsertar antes del cursor
ainsertar después del cursor
oabrir línea abajo y entrar a inserción
Oabrir línea arriba
Escvolver a normal
:wguardar
:qsalir
:wq o ZZguardar y salir
:q!salir sin guardar
udeshacer
Ctrl+Rrehacer
ddborrar la línea
yycopiar la línea
ppegar

Con eso ya puedes editar. El resto es mejorar.

Moverse

TeclaA dónde va
h j k lizquierda, abajo, arriba, derecha
w / bsiguiente / anterior palabra
efinal de la palabra
0 / $inicio / final de la línea
gg / Gprincipio / final del archivo
Ctrl+D / Ctrl+Umedia 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
OperadorQué hace
ddelete: borra
cchange: borra y entra a inserción
yyank: copia

Combinaciones que vas a usar todo el tiempo:

ComandoSe leeResultado
dwborrar palabraborra desde el cursor hasta la próxima palabra
d$borrar hasta el finalborra el resto de la línea
ddborrar líneaborra la línea completa
2ddborrar 2 líneasdos líneas
cwcambiar palabraborra la palabra y entra a insertar
yycopiar líneava al registro
p / Ppegar después / antespega
ggdGborrar todoarchivo 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ísQué hace
ciwcambia la palabra bajo el cursor
ci"cambia lo que está dentro de las comillas
di(borra lo que está dentro de los paréntesis
yapcopia 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

ComandoQué hace
/textobusca hacia adelante
?textobusca hacia atrás
n / Nsiguiente / anterior resultado
:nohapaga 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.

ComandoQué hace
:e archivoabre un archivo en un buffer
:lslista los buffers abiertos
:bnext / :bprevsiguiente / anterior buffer
:sp archivodivide horizontalmente
:vs archivodivide verticalmente
Ctrl+W + h/j/k/lse mueve entre ventanas
:tabnewnueva pestaña
gt / gTsiguiente / 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.

  1. qa empieza a grabar en el registro a.
  2. Haces la edición (por ejemplo, borrar una línea y pasar a la siguiente).
  3. q termina la grabación.
  4. @a la ejecuta. @@ repite la última.
  5. 100@a la 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)

MomentoObjetivo
Día 1vimtutor completo (30-45 min, viene instalado)
Día 1sobrevivir: i, Esc, :wq, :q!, u
Semana 1moverse con h j k l w b 0 $ gg G
Semana 2dd, yy, p, ciw, :%s
Semana 3text objects y modo visual
Semana 4macros, 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ónQué pasóSolución
Escribís y no aparece nadaestás en modo normali para insertar
No puedes salirno sabes el comandoEsc, después :q!
E37: No write since last changehay cambios sin guardar:w o :q!
Al pegar se indenta todoautoindent interactúa con el pegado:set paste, pega, :set nopaste
Ctrl+V pega en vez de seleccionarlo intercepta la terminalCtrl+Q
Perdiste una selección—gv
Borraste algo por error—u

Chuleta

NecesitoComando
insertari / a / o
volver a normalEsc
guardar y salir:wq
salir sin guardar:q!
deshacer / rehaceru / Ctrl+R
borrar líneadd
copiar / pegaryy / p
cambiar palabraciw
borrar hasta el finald$
ir al inicio / finalgg / G
buscar/texto + n
reemplazar todo:%s/viejo/nuevo/g
dividir pantalla:sp / :vs
grabar macroqa ... q + @a
repetir último cambio.

Hecho con amor para Laura, por Bogdan.