Pesquisa e substituição do Vim - Regex

Pesquisa e substituição do Vim - Regex

Quero realizar uma pesquisa e substituir. Uma nova linha antes de qualquer não dígito deve ser substituída por tabulação. tentei

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

mas substituiu o primeiro caractere da palavra após a nova linha, o que não é o que eu queria, ou seja

abcd
abcd

para

abcd   bcd

Quero preservar aapós a nova linha.

Responder1

Você está quase lá, mas sua expressão regular está substituindo a nova linhaeo não dígito com uma tabulação.

Que tal substituir cada nova linha seguida por um não dígito por uma tabulaçãoe esse mesmo não dígito?

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

O escape é um pouco confuso, mas basicamente você tem um agrupamento em torno de \Dque irá capturar o que quer que seja o não dígito. Isso é então mencionado para \1inseri-lo após a guia.

Responder2

Uma maneira de fazer isso é usar o marcador de final de partida:

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

Outra maneira de fazer isso é usar lookahead negativo:

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

Eles não são exatamente equivalentes, o segundo também substituirá a última nova linha em um arquivo.

Responder3

Eu espero que isso te ajude

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

informação relacionada