Sustituir texto con VIM, parte 2

Publicado el Thu 17 February 2011

Continuando con la sustitución de texto en VIM, ahora veremos cómo emplear caracteres especiales para formar patrones de texto para sustitución.
Texto de ejemplo:

"Mi auto Nissan (año 2000 de 2000 cc) es rápido, pero no creo que sirva para automovilismo profesional.
En cambio un Nismo, es un auto de verdad."

Ejemplo usando el texto de ejemplo:

:%s/auto/automovil/g

Mi automovil Nissan (año 2000 de 2000 cc) es rápido, pero no creo que sirva para automovilmovilismo profesional.
En cambio un Nismo, es un automovil de verdad.

:%s/\<auto\>/automovil/g

Mi automovil Nissan (año 2000 de 2000 cc) es rápido, pero no creo que sirva para automovilismo profesional.
En cambio un Nismo, es un automovil de verdad.

En este caso, \< y \> hacen la diferencia. \< es para texto que comience con... y \> para texto que termine con... (\<auto\> es para la palabra auto).

:%s/de \zs2000\ze cc/1600/g

Mi automovil Nissan (año 2000 de 1600 cc) es rápido, pero no creo que sirva para automovilismo profesional.
En cambio un Nismo, es un automovil de verdad.

Acá le damos el patrón a buscar pero definimos sólo una parte para la sustitución.

:%s/[a-zñáéíóú]/\u&amp;/g

MI AUTOMOVIL NISSAN (AÑO 2000 DE 2000 CC) ES RÁPIDO, PERO NO CREO QUE SIRVA PARA AUTOMOVILISMO PROFESIONAL.EN CAMBIO UN NISMO, ES UN AUTOMOVIL DE VERDAD.

Acá le indicamos que cualquier letra entre a-z, además de ñ y las vocales acentuadas sean pasadas a mayúsculas.

Caracteres especiales sin escapado:

  • ^ se emplea para los comienzos de líneas

    Para comentar la línea actual y las 4 siguientes en python:
    :.,+4s/^/#/g

  • $ se emplea para los términos de líneas

  • . cualquier caracter
    • 0 o más veces el caracter previo en la expresión
      Convertir cada par de ceros (00) por x
      :s/\(00\)*/xx
  • [xxx] cualquiera de los caractes de la lista ([a-z], [abcd], [0-9])

  • [^xxx] cualquier caracter no contenido en la lista ([^0-9])

Caracteres especiales que requieren escapado.

  • \< inicio de palabra
  • \> término de palabra
  • \(...\) agrupa el interior como una expresión atómica, como si fuese un caracter
  • \+ 1 o más veces el caracter previo
  • \{x} x veces el caracter o expresión atómica previa
  • \{x,y} entre x e y veces el caracter o expresión atómica previa