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
Modo
Comando
Acción
N
/{patrón}
Busca hacia adelante
N
?{patrón}
Busca hacia atrás
N
n
Siguiente ocurrencia (misma dirección)
N
N
Ocurrencia anterior (dirección opuesta)
N
*
Busca la palabra bajo el cursor hacia adelante
N
#
Busca la palabra bajo el cursor hacia atrás
N
g*
Como * pero sin exigir palabra completa
N
g#
Como # pero sin exigir palabra completa
Opciones de búsqueda
Modo
Comando
Acción
C
:set ignorecase
Búsqueda sin distinción de mayúsculas
C
:set smartcase
Case-sensitive solo si el patrón tiene mayúsculas
C
:set hlsearch
Resalta todas las ocurrencias encontradas
C
:set incsearch
Muestra resultados mientras se escribe el patrón
N
:noh
Limpia 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
Modo
Comando
Acción
N
/\bpalabra\b
Palabra completa (word boundary)
N
/\cpatrón
Fuerza búsqueda case-insensitive en ese patrón
N
/\Cpatrón
Fuerza búsqueda case-sensitive en ese patrón
N
/patrón\n
Busca 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}/e
Deja el cursor al final de la coincidencia
Sustitución básica
Modo
Comando
Acción
C
:%s/viejo/nuevo/
Reemplaza la primera ocurrencia en cada línea
C
:%s/viejo/nuevo/g
Reemplaza todas las ocurrencias en el archivo
C
:%s/viejo/nuevo/gi
Reemplaza todas, case-insensitive
C
:%s/viejo/nuevo/gc
Reemplaza con confirmación interactiva (y/n/a/q)
C
:s/viejo/nuevo/g
Reemplaza en la línea actual
C
:{n},{m}s/viejo/nuevo/g
Reemplaza entre las líneas n y m
C
:'<,'>s/viejo/nuevo/g
Reemplaza dentro de la selección Visual
Sustitución avanzada
Modo
Comando
Acción
C
:%s/\(foo\)\(bar\)/\2\1/g
Intercambia grupos capturados
C
:%s/\v(foo)(bar)/\2\1/g
Igual con very magic (sin escapar)
C
:%s/viejo/nuevo/gn
Cuenta ocurrencias sin reemplazar
C
:%s/patrón//gn
Cuenta 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/g
Reemplaza solo palabras completas
C
:%s/foo/\=toupper(submatch(0))/g
Reemplaza con resultado de expresión Vimscript
Búsqueda en múltiples archivos
Modo
Comando
Acción
C
:vimgrep /patrón/ **/*.py
Busca en archivos recursivamente
C
:copen
Abre la quickfix list con los resultados
C
:cnext
Salta al siguiente resultado en quickfix
C
:cprev
Salta al resultado anterior en quickfix
C
:cfdo %s/viejo/nuevo/g
Aplica sustitución en todos los archivos del quickfix
C
:cfdo update
Guarda 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.