Vim buscar y reemplazar - Regex

Vim buscar y reemplazar - Regex

Quiero realizar una búsqueda y reemplazar. Una nueva línea antes de cualquier elemento que no sea un dígito debe reemplazarse con una tabulación. Lo intenté

%s/\n\D/\t/g

pero reemplazó el primer carácter de la palabra que sigue a la nueva línea, que no es lo que quería, es decir

abcd
abcd

a

abcd   bcd

Quiero conservar adespués de la nueva línea.

Respuesta1

Ya casi has llegado, pero tu expresión regular está reemplazando tanto la nueva líneayel que no es dígito con una pestaña.

¿Qué tal si reemplazamos cada nueva línea seguida de una que no sea un dígito con una pestaña?y ese mismo no dígito?

%s/\n\(\D\)/\t\1/g

El escape es un poco complicado, pero básicamente tienes una agrupación alrededor \Dque capturará lo que no sea un dígito. Luego se hace referencia a esto \1para insertarlo después de la pestaña.

Respuesta2

Una forma de hacerlo es utilizar el marcador de final de partido:

%s/\n\ze\D/\t/

Otra forma de hacerlo es utilizar una búsqueda anticipada negativa:

%s/\n\d\@!/\t/

No son exactamente equivalentes, la segunda también reemplazará la última nueva línea en un archivo.

Respuesta3

Espero que esto ayude

:%s#\n.\D#\t#g

información relacionada