Vemos cómo podemos sustituir texto fácilmente en el editor Vim

El editor Vim nos puede ayudar mucho a la hora de tener que sustituir un texto por otro en un documento o archivo.

Este artículo viene a sumarse a los que ya he escrito sobre el editor Vim, en el que podremos ir aprendiendo funcionalidades básicas y muy útiles sobre este editor de texto. Los tienes disponibles en este enlace:

En un artículo anterior de esta serie, ya expliqué los conceptos básicos a la hora de realizar búsquedas mediante Vim, este es en cierto modo un complemento a ese artículo. Empezamos…

Primero veamos cómo sustituir un texto en una línea, y después vayamos completándolo para hacerlo más útil:

:s/antiguo/nuevo

Este comando lo que nos hará es sustituir (de ahí el comando :s de substitute) la palabra “antiguo” por la de “nuevo” en la línea en la que se encuentre el cursor y con la primera palabra que encuentre.

Es decir, que si hay dos palabras “antiguo” en la línea del cursor, sólo hará la sustitución en la primera. Si eso es lo que queremos, podemos dejarlo aquí. Pero quizás queremos que el comando sea más completo.

Si queremos que lo haga en todas las palabras “antiguo” que encuentre en la línea del cursor deberemos añadir /g al final del comando, de la siguiente manera:

:s/antiguo/nuevo/g

¿Y si queremos que lo haga en todo el archivo no solo en la línea en la que se encuentre el cursor? Para ello escribiremos lo siguiente:

:%s/antiguo/nuevo/g

Añadiendo ese % al comienzo del comando, le decimos a Vim que el rango que queremos que cubra es el archivo completo.

Pero quizás algunos queremos cambiarlos y otros no. Para ello podemos decirle que en cada coincidencia que encuentre de nuestro patrón a sustituir, nos pregunte una confirmación para que seamos notros quienes decidamos si hacer o no la sustitución.

Para que nos pida la confirmación de cada sustitución añadiremos una c al final del comando, de la siguiente manera:

:%s/antiguo/nuevo/gc

Esta es la forma más usual de búsqueda y sustitución de un texto en nuestro archivo. En cada coincidencia nos preguntará qué hacer y tenemos varias opciones, veámoslas con detalle:

y es para yes: confirmar la sustitución

es para yes: confirmar la sustitución n es para no: no realizará la sustitución en esa palabra y continuará el comando

es para no: no realizará la sustitución en esa palabra y continuará el comando a es para all: realizará la sustitución en todas las palabras

es para all: realizará la sustitución en todas las palabras q es para quit: cerrará el comando de sustitución

es para quit: cerrará el comando de sustitución l es para last: sustituirá la palabra actual y terminará el comando

Sencillo, ¿verdad? En resumen podemos decir que el comando sustituir se compone de estos campos:

:[rango] s/patrón/cadena/[opciones]

En Rango podemos definir una línea, un rango de líneas entre las que hacer la búsqueda o todo el archivo como hemos visto con %

Patrón y cadena son las palabras a buscar y con las que sustituirlas respectivamente. Y las opciones que se pueden añadir también pueden ser varias y pueden usarse de manera separada o en conjunto:

g → para que sustituya todas las coincidencias de las diferentes líneas definidas en el rango

→ para que sustituya todas las coincidencias de las diferentes líneas definidas en el rango c → para pedir confirmación, como hemos visto antes

→ para pedir confirmación, como hemos visto antes i → ignorar las mayúsculas para el patrón

→ ignorar las mayúsculas para el patrón I → No ignorar las mayúsculas en el patrón

El comando de sustituir tiene muchas más opciones interesantes que pueden ser muy útiles en otros casos. Pero en este artículo solo quería dar los conceptos básicos para aprender a sustituir cadenas de texto mediante Vim.

Espero que te haya resultado interesante. Tienes más información en mi blog y en esta web con una recopilación de comandos de Vim: