Cómo buscar y reemplazar en varios archivos en Vim

En este artículo, aprenderá a buscar y reemplazar de forma interactiva en muchos archivos con solo dos comandos, gracias a Vim.

Si bien existe una multitud de métodos para buscar y reemplazar palabras en un solo archivo, ¿qué hace cuando tiene una cadena para actualizar en varios archivos no relacionados, todos con nombres diferentes? ¡Aprovecha el poder de las herramientas de línea de comandos, por supuesto!

Primero, necesitará findtodos los archivos que desea cambiar. Encadenar lo que son efectivamente consultas de búsqueda findsolo está limitado por su imaginación.

Aquí hay un ejemplo simple que encuentra archivos de Python:

find . -name '*.py' 

La -nameprueba busca un patrón, como todos los archivos que terminan en .py. Pero findpuede hacer mucho más con otras condiciones de prueba, incluidas las -regexpruebas. Corre find --helppara ver la multitud de opciones.

Afine aún más su búsqueda usando greppara obtener solo los archivos que contienen la cadena que desea cambiar, como agregando:

grep -le '\' 

La -lopción le proporciona solo los nombres de archivo para todos los archivos que contienen un patrón (indicado con -e) que coinciden con "una ballena".

También puede usar el impresionante Vim, :bufdoque le permite ejecutar el mismo comando en varios búferes. Funciona de forma interactiva con todos estos archivos sin el tedio de abrir, guardar y cerrar cada archivo, uno a la vez.

Conectemos sus potentes resultados find+ grepa Vim con:

vim `find . -name '*.py' \ -exec grep -le '\' {} \;` 

El uso de la expansión de tilde invertido para pasar nuestra búsqueda a Vim abre múltiples búferes listos para usar. (Hazlo :h backtick-expansionen Vim para más.)

Ahora puede aplicar el comando Vim :bufdoa todos estos archivos y realizar acciones como buscar y reemplazar interactivos:

:bufdo %s/a whale/a bowl of petunias/gce 

El gde "global" cambiará las ocurrencias del patrón en todas las líneas. El eomitiremos errores si no se encuentra el patrón. La copción hace que esto sea interactivo. Si se siente seguro, puede omitirlo para realizar los cambios sin revisar cada uno.

Cuando haya terminado de revisar todos los búferes, guarde todo el trabajo que haya completado con:

:bufdo wq! 

Luego, disfrute de la gloria de su tiempo y esfuerzo ahorrados.