wandres.dev
NOVATO · Fundamentos

La gramática de Vim (el superpoder)

Operadores + mociones + objetos de texto: la fórmula componible que convierte un puñado de teclas en miles de ediciones precisas. Esta es LA lección.

⏱ 16 min

Si solo aprendes una cosa de todo el Nivel 0, que sea esta. La verdadera potencia de Neovim no está en memorizar atajos, sino en un lenguaje: cada edición es una frase con un verbo y un objeto.

🎯 Al terminar esta lección sabrás
  • La fórmula operador + moción y operador + objeto de texto.
  • Los operadores y objetos de texto esenciales.
  • Componer ediciones nuevas que nunca “memorizaste”.
  • Pensar la edición como un idioma, no como una lista de trucos.

La fórmula

Casi toda edición en Neovim sigue una de estas dos estructuras:

[conteo] operador  moción           → verbo + a dónde
[conteo] operador  objeto-de-texto  → verbo + sobre qué

Es literalmente gramática: un verbo (qué hacer) y un complemento (sobre qué texto). Aprende las piezas por separado y se combinan solas.

flowchart LR
Op["Operador<br/>(verbo)"] --> Tgt["Moción u objeto<br/>(complemento)"]
Tgt --> Act["Acción precisa"]
subgraph Ejemplos
  E1["ciw cambia la palabra"]
  E2["di( borra dentro de parentesis"]
  E3["yap copia el parrafo"]
end
style Op fill:#cba6f7,color:#11111b
style Tgt fill:#89b4fa,color:#11111b
style Act fill:#a6e3a1,color:#11111b

Los operadores (verbos)

Operador Significado
d delete — borrar
c change — borrar y entrar en Insertar
y yank — copiar
> / < indentar / desindentar
= auto-indentar
gu / gU a minúsculas / MAYÚSCULAS
gc comentar (con plugin/nativo)

Un operador por sí solo no hace nada: espera un complemento. d seguido de w borra hasta la siguiente palabra. d seguido de $ borra hasta el final de línea.

Operador + moción

Combina cualquier operador con cualquier movimiento de la lección anterior:

dw borra hasta la siguiente palabrad$ borra hasta fin de líneac$ cambia hasta fin de líneay0 copia hasta inicio de línead3j borra 3 líneas hacia abajoct, cambia hasta la próxima coma>% indenta hasta la llave que empareja
💡
Duplica el operador = línea entera

dd borra la línea, yy la copia, >> la indenta, gcc la comenta. Repetir el operador lo aplica a la línea actual completa.

Objetos de texto (la joya de la corona)

Aquí está la diferencia real con cualquier otro editor. Un objeto de texto describe una región semántica: una palabra, lo que hay entre comillas, un bloque, una etiqueta HTML. Se usan con i (inner, interior) o a (a, incluye delimitadores).

Objeto Selecciona
iw / aw palabra (inner / con espacio)
i" / a" dentro de comillas / con comillas
i( i) ib dentro de paréntesis
i{ i} iB dentro de llaves
i[ / i< dentro de corchetes / angulares
it / at dentro de etiqueta HTML/JSX / etiqueta completa
ip / ap párrafo

Ahora la magia: combina operador + objeto de texto. No importa dónde esté el cursor dentro del objeto, funciona igual:

ciw cambia la palabra enteradi“ borra el contenido del stringca( cambia args incluyendo paréntesisyi{ copia el interior del bloquedap borra el párrafo enterocit cambia el contenido de una etiqueta
Piensa en frases, no en teclas

Deja de leer ci" como “c-i-comilla”. Léelo como una frase: “change inside quotes” — cambia lo que hay entre comillas. daw = “delete a word”. yi( = “yank inside parens”. Cuando pienses en inglés-verbo así, dejarás de memorizar y empezarás a improvisar ediciones que nunca viste. Ese es el nivel dios de la edición.

Conteos y repetición

Todo se compone aún más con números y con .:

3dw     → borra 3 palabras
2ci(    → (raro pero válido) cambia contenido de 2 niveles
d2ap    → borra 2 párrafos con su espacio

Y recuerda .: haz ciw para cambiar una palabra, escribe la nueva, pulsa Esc, muévete a otra palabra con w y pulsa . para repetir el cambio. Con n (buscar) + . refactorizas ocurrencias a mano a toda velocidad.

Tu chuleta mental

Piezas que, combinadas, dan miles de ediciones:

VERBOS:    d  c  y  >  <  =  gu  gU  gc
MOCIONES:  w  b  e  0  $  ^  f{x} t{x}  /texto  %  j  k
OBJETOS:   iw aw  i" a"  i( a(  i{ a{  it at  ip ap

Cualquier verbo × cualquier moción/objeto = una acción válida. No hay que memorizar la tabla de combinaciones: emerge de las piezas.

⚔️ Habla el idioma

Con un archivo de código abierto, resuelve cada tarea con una sola frase de edición:

  1. Renombra una variable (cursor encima) → ciw nuevoNombre Esc.
  2. Cambia el texto de un string → cursor dentro, ci".
  3. Borra todos los argumentos de una llamada → cursor dentro de los paréntesis, di(.
  4. Copia un bloque { } entero → ya{.
  5. Comenta un párrafo → gcap.

Cuando estas cinco te salgan sin pensar, has terminado el Nivel 0. Pasa a construir tu config.