Vim ofrece búsqueda incremental con expresiones regulares y un comando de sustitución preciso y flexible. Combinados, permiten localizar y transformar texto con control quirúrgico sobre el alcance y las condiciones.


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

Búsqueda básica

ModoComandoAcción
N/{patrón}Busca hacia adelante
N?{patrón}Busca hacia atrás
NnSiguiente ocurrencia (misma dirección)
NNOcurrencia anterior (dirección opuesta)
N*Busca la palabra bajo el cursor hacia adelante
N#Busca la palabra bajo el cursor hacia atrás
Ng*Como * pero sin exigir palabra completa
Ng#Como # pero sin exigir palabra completa

Opciones de búsqueda

ModoComandoAcción
C:set ignorecaseBúsqueda sin distinción de mayúsculas
C:set smartcaseCase-sensitive solo si el patrón tiene mayúsculas
C:set hlsearchResalta todas las ocurrencias encontradas
C:set incsearchMuestra resultados mientras se escribe el patrón
N:nohLimpia el resaltado sin desactivar hlsearch
N/<Enter>Repite la última búsqueda hacia adelante
N?<Enter>Repite la última búsqueda hacia atrás

Búsqueda con patrones

ModoComandoAcción
N/\bpalabra\bPalabra completa (word boundary)
N/\cpatrónFuerza búsqueda case-insensitive en ese patrón
N/\CpatrónFuerza búsqueda case-sensitive en ese patrón
N/patrón\nBusca patrón seguido de salto de línea
N/^\s*$Busca líneas vacías o con solo espacios
N/\v{patrón}Very magic: regex sin escapar metacaracteres
N/\V{patrón}Very nomagic: trata todo como literal
N/{patrón}/eDeja el cursor al final de la coincidencia

Sustitución básica

ModoComandoAcción
C:%s/viejo/nuevo/Reemplaza la primera ocurrencia en cada línea
C:%s/viejo/nuevo/gReemplaza todas las ocurrencias en el archivo
C:%s/viejo/nuevo/giReemplaza todas, case-insensitive
C:%s/viejo/nuevo/gcReemplaza con confirmación interactiva (y/n/a/q)
C:s/viejo/nuevo/gReemplaza en la línea actual
C:{n},{m}s/viejo/nuevo/gReemplaza entre las líneas n y m
C:'<,'>s/viejo/nuevo/gReemplaza dentro de la selección Visual

Sustitución avanzada

ModoComandoAcción
C:%s/\(foo\)\(bar\)/\2\1/gIntercambia grupos capturados
C:%s/\v(foo)(bar)/\2\1/gIgual con very magic (sin escapar)
C:%s/viejo/nuevo/gnCuenta ocurrencias sin reemplazar
C:%s/patrón//gnCuenta coincidencias del patrón
C:%s/\s\+$//Elimina espacios en blanco al final de cada línea
C:%s/^/ /Añade dos espacios al inicio de cada línea
C:%s/.*/\U&/Convierte todo el archivo a mayúsculas
C:%s/\bfoo\b/bar/gReemplaza solo palabras completas
C:%s/foo/\=toupper(submatch(0))/gReemplaza con resultado de expresión Vimscript

Búsqueda en múltiples archivos

ModoComandoAcción
C:vimgrep /patrón/ **/*.pyBusca en archivos recursivamente
C:copenAbre la quickfix list con los resultados
C:cnextSalta al siguiente resultado en quickfix
C:cprevSalta al resultado anterior en quickfix
C:cfdo %s/viejo/nuevo/gAplica sustitución en todos los archivos del quickfix
C:cfdo updateGuarda los archivos modificados por :cfdo

Tips

  • :set smartcase con :set ignorecase es la combinación más práctica: búsquedas en minúsculas son flexibles, en mixto son exactas.
  • El flag gn en la sustitución (:%s/patrón//gn) es útil antes de reemplazar para verificar cuántas ocurrencias serán afectadas.
  • \v (very magic) hace que la regex se comporte similar a la de otros lenguajes: \v(foo|bar)\d+ sin escapes adicionales.
  • :cfdo %s/viejo/nuevo/g | update en una sola línea reemplaza y guarda en todos los archivos del quickfix, equivalente a un refactor de proyecto.
  • Durante la confirmación interactiva con gc, la opción a acepta todos los restantes de una vez sin cancelar el modo confirmación.