Búsqueda y Reemplazo Eficiente
La búsqueda y reemplazo son funcionalidades fundamentales en Vim que te permitirán trabajar con gran velocidad y precisión. Dominar estas técnicas es clave para la productividad.
🔍 Búsqueda Básica
Búsqueda hacia adelante
/patrón
Búsqueda hacia atrás
?patrón
Navegación en resultados
n
- Siguiente resultadoN
- Resultado anterior*
- Buscar palabra bajo el cursor (hacia adelante)#
- Buscar palabra bajo el cursor (hacia atrás)
🎯 Búsqueda Avanzada
Búsqueda incremental
:set incsearch " Búsqueda en tiempo real
:set hlsearch " Resaltar resultados
:nohlsearch " Quitar resaltado (o :noh)
Búsqueda con sensibilidad de mayúsculas
:set ignorecase " Ignorar mayúsculas
:set smartcase " Inteligente: mayúsculas solo si escribes mayúsculas
Búsqueda de palabras completas
/\<palabra\> " Buscar palabra exacta
Búsqueda multi-línea
/palabra\_s*en\_s*otra\_s*línea " Con espacios y saltos de línea
🔄 Reemplazo (Substitute)
Sintaxis básica
:[rango]s/patrón/reemplazo/[flags]
Ejemplos básicos
:s/viejo/nuevo/ " Primera ocurrencia en línea actual
:s/viejo/nuevo/g " Todas las ocurrencias en línea actual
:%s/viejo/nuevo/g " Todas las ocurrencias en todo el archivo
:1,10s/viejo/nuevo/g " Líneas 1 a 10
Flags útiles
g
- Global (todas las ocurrencias en la línea)c
- Confirmar cada reemplazoi
- Ignorar mayúsculasI
- No ignorar mayúsculas
Reemplazo con confirmación
:%s/viejo/nuevo/gc
y
- Sí, reemplazarn
- No, saltara
- Sí a todoq
- Salirl
- Reemplazar este y salir
🎨 Expresiones Regulares
Metacaracteres básicos
. " Cualquier carácter
* " 0 o más del carácter anterior
\+ " 1 o más del carácter anterior
\? " 0 o 1 del carácter anterior
^ " Inicio de línea
$ " Final de línea
\< " Inicio de palabra
\> " Final de palabra
Clases de caracteres
[abc] " a, b, o c
[a-z] " Cualquier letra minúscula
[A-Z] " Cualquier letra mayúscula
[0-9] " Cualquier dígito
\d " Dígito [0-9]
\D " No dígito
\w " Carácter de palabra [a-zA-Z0-9_]
\W " No carácter de palabra
\s " Espacio en blanco
\S " No espacio en blanco
Grupos y referencias
\(patrón\) " Grupo capturado
:%s/\(hello\) \(world\)/\2 \1/g " Intercambiar palabras
🚀 Técnicas Avanzadas
Reemplazo usando expresiones Vim
:%s/\d\+/\=submatch(0)*2/g " Duplicar todos los números
Reemplazo en archivos específicos
:args **/*.js | argdo %s/var/let/ge | update
Búsqueda en múltiples archivos
:vimgrep /patrón/ **/*.py " Buscar en archivos Python
:copen " Abrir lista de resultados
Usar el registro de búsqueda
:let @/ = "mi_búsqueda" " Establecer búsqueda programáticamente
📝 Ejercicios Prácticos
Ejercicio 1: Búsqueda básica
- Abre un archivo con código
- Busca todas las instancias de una función específica
- Navega entre los resultados
- Usa
*
para buscar la palabra bajo el cursor
Ejercicio 2: Reemplazo simple
Texto original:
var nombre = "Juan";
var edad = 25;
var activo = true;
Tarea: Reemplazar todas las 'var' por 'let'
Ejercicio 3: Reemplazo con grupos
Texto original:
console.log("Error: " + message);
console.log("Warning: " + warning);
console.log("Info: " + info);
Tarea: Cambiar a template literals
Resultado: console.log(`Error: ${message}`);
Ejercicio 4: Expresiones regulares
Texto original:
2023-12-01
2023-11-15
2023-10-30
Tarea: Cambiar formato a 01/12/2023
🎯 Casos de Uso Reales
Refactoring de código
" Cambiar nombre de variable en todo el archivo
:%s/\<oldVarName\>/newVarName/g
" Cambiar importaciones
:%s/from '\.\/old-module'/from '.\/new-module'/g
Limpieza de datos
" Eliminar espacios al final de líneas
:%s/\s\+$//g
" Normalizar espacios múltiples
:%s/\s\+/ /g
" Convertir tabs a espacios
:%s/\t/ /g
Formateo de texto
" Agregar comillas a palabras
:%s/\w\+/"&"/g
" Convertir lista a array
:%s/\n/, /g
⚙️ Configuración Recomendada
Agrega estas líneas a tu .vimrc
:
" Mejoras para búsqueda
set incsearch " Búsqueda incremental
set hlsearch " Resaltar resultados
set ignorecase " Ignorar mayúsculas
set smartcase " Inteligente con mayúsculas
" Atajo para quitar resaltado
nnoremap <Leader>h :nohlsearch<CR>
" Mantener selección después de buscar
vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
" Búsqueda del texto seleccionado
vnoremap // y/\V<C-R>=escape(@",'/\')<CR><CR>
🏆 Tips Pro
- Usa
very magic
::set magic
o\v
al inicio del patrón - Historial de búsqueda:
q/
para acceso completo - Búsqueda global:
:g/patrón/comando
para ejecutar comando en líneas que coincidan - Preview de cambios: Usa el flag
n
para contar ocurrencias sin reemplazar - Deshacer masivo:
u
deshace todo el comando substitute
📚 Recursos Adicionales
:help pattern-overview
- Documentación de patrones:help substitute
- Documentación completa de substitute:help regular-expression
- Guía de expresiones regulares en Vim
¡La búsqueda y reemplazo eficiente es una de las superpotencias de Vim! Practica estos comandos hasta que se vuelvan automáticos.