Saltar al contenido principal

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
  • n - Siguiente resultado
  • N - 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 reemplazo
  • i - Ignorar mayúsculas
  • I - No ignorar mayúsculas

Reemplazo con confirmación

:%s/viejo/nuevo/gc
  • y - Sí, reemplazar
  • n - No, saltar
  • a - Sí a todo
  • q - Salir
  • l - 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

  1. Abre un archivo con código
  2. Busca todas las instancias de una función específica
  3. Navega entre los resultados
  4. 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

  1. Usa very magic: :set magic o \v al inicio del patrón
  2. Historial de búsqueda: q/ para acceso completo
  3. Búsqueda global: :g/patrón/comando para ejecutar comando en líneas que coincidan
  4. Preview de cambios: Usa el flag n para contar ocurrencias sin reemplazar
  5. 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.