[Vim] Búsquedas y Reemplazo

Esta operación tan básica no puede faltar en cualquier editor, y en Vim (realmente uso Neovim) me resulta muy fácil hacerla.

Forma 1

Normalmente lo que me suele pasar es que mientras estoy escribiendo o programando, me encuentro con la palabra que quiero sustituir y directamente hacer el cambio.

Para esto, estando en el modo Normal y con el cursor encima de la palabra

Forma 2

Si lo que quiero es sustituir todas las coincidencias de la palabra que busco, lo hago con el comando :substitute (:s). La forma de construir las búsquedas con este comando es

:[range]s/{pattern}/{string}/[flags] [count]

Este comando busca en cada línea del rango ([range]) el patrón ({pattern}) especificado, y lo reemplaza por la cadena ({string}). El contador ([count]) es un entero positivo que multiplica el número de veces la ejecución del comando. Si no indicamos [range] ni [count] sólo reemplazará en la línea actual.

Como lo que busco es buscar y reemplazar en todo el fichero

:%s/foo/bar/g

Si queremos tener un mensaje de confirmación en cada sustitución

:%s/foo/bar/gc

Para ignorar el case sensitivity (la sensibilidad de mayúsculas y minúsculas)

:%s/foo/bar/gi

Uniendo estas dos formas

Para rematar la jugada vamos a unir estas dos formas de búsqueda-sustitución en un comando y así ser más rápidos. En nuestro fichero de configuración de Vim o de Neovim añadimos lo siguiente

nnoremap <Leader>s :%s/\<<C-r><C-w>\>//g<Left><Left>

Ahora pulsando la tecla <Leader> (por defecto en Vim es \) + s, tendremos directamente la búsqueda realizada y solo tenemos que escribir el reemplazo.

Reemplazar una palabra con texto copiado

Otra operación que de vez en cuando me pasa, es precisamente lo que indica el título, copio una palabra y la quiero sustituir por otra.

Referencias