Reemplazar usando VIM, reutilizar parte del patrón de búsqueda

Reemplazar usando VIM, reutilizar parte del patrón de búsqueda

Estoy trabajando VIme intentando configurar un comando de búsqueda y reemplazo para realizar algunos reemplazos en los que pueda reutilizar la expresión regular que forma parte de mi cadena de búsqueda.

Un ejemplo simple sería una línea donde quiero reemplazar (10)a {10}, donde 10 puede ser cualquier número.

llegué hasta aquí

  .s/([0-9]*)/what here??/

que coincide exactamente con la parte que quiero.

Ahora el reemplazo, lo intenté.

  .s/([0-9]*)/{\0}/

Pero esto da como resultado{(10)}

Entonces lo intenté

 .s/(\zs[0-9]*\ze)/{\0}/

Sin embargo, eso me dio ({10}), que también cierro, pero no es lo que quiero.

Creo que necesito algún otro tipo de marcado/referencia en lugar de esto \0, pero no sé dónde buscar. Entonces la pregunta es, ¿se puede hacer esto en vim y, de ser así, cómo?

Respuesta1

\0es todo el partido. Para usar solo una parte, debes configurarlo así y usar \1

.s/(\([0-9]*\))/{\1}/

Puede encontrar instrucciones más detalladasaquío en vim ayuda.

Respuesta2

Recientemente heredé un código heredado y quería reemplazar todas las apariciones como:

print "xx"
print x,y
print 'xx'

a

logging.info("xy") 

o

logging.info(x,y)

Aprovechando la respuesta anteriory con la esperanza de que alguien se beneficie, utilicé el siguiente comando, que cambiará todas las ocurrencias:

%s/print\( .*\)/logging.info\(\1\)/g

Si sustituyes y eliminas %terminarás con./g

.s/print\( .*\)/logging.info\(\1\)

que te permitirá repasar cada partido y elegir si lo cambias o no.

Respuesta3

Una mejor manera de permitirle repasar cada coincidencia es agregar una "c" al final del código, en lugar de ir línea por línea.

%s/print\( .*\)/logging.info\(\1\)/gc

información relacionada