El sistema de operadores y movimientos es el núcleo del lenguaje de Vim: un operador define qué hacer y un movimiento define sobre qué. Cualquier combinación válida produce un comando preciso y componible.


Abreviaciones de modos:
N = Normal | I = Insert | V = Visual | C = Command | VB = Visual Block

Operadores principales

ModoComandoAcción
Nd{motion}Borra el texto cubierto por el movimiento
Ny{motion}Copia el texto cubierto por el movimiento
Nc{motion}Cambia el texto cubierto (borra y entra a Insert)
N>{motion}Indenta a la derecha el texto cubierto
N<{motion}Indenta a la izquierda el texto cubierto
N={motion}Autoindenta el texto cubierto
Ng~{motion}Alterna mayúsculas/minúsculas del texto cubierto
Ngu{motion}Convierte a minúsculas el texto cubierto
NgU{motion}Convierte a mayúsculas el texto cubierto
N!{motion}Filtra el texto cubierto por un comando externo
VgqFormatea el texto seleccionado respetando textwidth

Movimientos esenciales como argumento

ModoComandoAcción
N{op}wHasta el inicio de la siguiente palabra
N{op}eHasta el final de la palabra actual
N{op}bHacia atrás hasta el inicio de la palabra
N{op}$Hasta el final de la línea
N{op}0Hasta el inicio de la línea
N{op}^Hasta el primer carácter no-blanco
N{op}ggDesde el cursor hasta la primera línea
N{op}GDesde el cursor hasta la última línea
N{op}{n}jEl operador aplicado sobre n líneas hacia abajo
N{op}f{c}Hasta el carácter c inclusive
N{op}t{c}Hasta justo antes del carácter c
N{op}/patrónHasta la siguiente ocurrencia del patrón

Text objects (objetos de texto)

ModoComandoAcción
N{op}iwPalabra actual (inner word, sin espacios)
N{op}awPalabra actual más el espacio adyacente
N{op}isOración actual (inner sentence)
N{op}asOración actual más espacio adyacente
N{op}ipPárrafo actual (inner paragraph)
N{op}apPárrafo actual más línea vacía adyacente
N{op}i"Contenido dentro de comillas dobles
N{op}a"Comillas dobles y su contenido
N{op}i'Contenido dentro de comillas simples
N{op}i)Contenido dentro de ()
N{op}a)Paréntesis y su contenido
N{op}i]Contenido dentro de []
N{op}i}Contenido dentro de {}
N{op}itContenido dentro de etiqueta HTML/XML
N{op}atEtiqueta HTML/XML y su contenido
N{op}i``Contenido dentro de backticks

Formas dobles (operador aplicado a la línea completa)

ModoComandoAcción
NddBorra la línea completa
NyyCopia la línea completa
NccCambia la línea completa
N>>Indenta la línea a la derecha
N<<Indenta la línea a la izquierda
N==Autoindenta la línea actual
NguuConvierte la línea a minúsculas
NgUUConvierte la línea a mayúsculas

Combinaciones con count

ModoComandoAcción
N{n}{op}{motion}Aplica el operador n veces sobre el movimiento
Nd2wBorra las siguientes 2 palabras
Ny3jCopia la línea actual más las 3 siguientes
Nc2f,Cambia hasta la segunda coma en la línea
N>2jIndenta la línea actual y las 2 siguientes
Nd5ddEquivalente a borrar 5 líneas (igual que 5dd)

Tips

  • {op}i{delimitador} funciona desde cualquier punto dentro del bloque: el cursor no necesita estar en el delimitador, solo dentro de él.
  • c/patrón<Enter> es extremadamente preciso para cambiar texto hasta un punto visual exacto sin contar palabras.
  • =G desde cualquier posición autoindenta todo el resto del archivo; gg=G lo hace completo.
  • gU{motion} y gu{motion} aceptan cualquier movimiento o text object: gUiw convierte la palabra actual a mayúsculas sin moverse.
  • La regla del doble (dd, yy, cc) se cumple para todos los operadores: cuando no sabes qué motion usar, prueba doble para operar sobre la línea completa.