2009-12-04 16 views
5

Estoy buscando una expresión regular que cambie algo. de esta manera:(g) vim replace regex

print "testcode $testvar \n"; 

en

printnlog("testcode $testvar \n");

Probé %s/print\s*(.\{-});/printnlog(\1);/g pero gvim dice

print\s*(.\{-}); 

no coincide.

¿Dónde está mi culpa? ¿Está bien usar '*' después de '\ s' porque más tarde '{-};' detendrá la avaricia?

Gracias de antemano.

+1

+1. para '{-}', me olvidé de eso en Vim – MBO

+1

Encontré un buen sitio para regex en vim -> http://vimregex.com disfruta – Milde

Respuesta

8

En vim que tienen que anteponer (, ) y | con barra invertida, así que intenta

:%s/print\s*\(.\{-}\);/printnlog(\1);/g 
+0

no puedo creer que olvidé escapar de los corchetes :) tu regex funciona perfectamente bien – Milde

+0

Eliminar la última barra del enlace @ Adam para trabajar – MBO

+0

¡Gracias MBO, eliminó el original y lo arregló a continuación! –

0

Si bien puede crear grupos de captura (como lo hace), creo que el enfoque más fácil es hacer el trabajo en varios pasos, con expresiones regulares y palabras "bandera" muy simples. Por ejemplo:

:%s/print "testcode.*/printnlog(XXX&XXX);/ 
:%s/XXXprint // 
:%s/;XXX// 

En estos ejemplos, yo uso "XXX" para indicar los límites que luego deben ser recortadas (se puede usar cualquier cosa que no aparece en el código). El ampersand (&) toma la cadena de coincidencia completa y la inserta en la cadena de reemplazo.

No sé de otras personas, pero puedo escribir y ejecutar estas tres expresiones regulares más rápido de lo que puedo pensar a través de un grupo de captura.

0

¿Es esto suficiente para sus necesidades?

%s/print\s*\("[^"]*"\)/printnlog(\1) 
+0

esta expresión regular también está bien, pero ya marqué otra respuesta como "aceptada", no solo porque fue la primera expresión regular de trabajo, sino que recuerda haber salido de los paréntesis en vim :) – Milde

4

respuesta de MBO funciona muy bien, pero a veces me parece que es más fácil de usar la opción "muy mágico" \v así que no tengo que escapar de todo; hace que la expresión regular sea un poco más legible.

Consulte también:

+0

Genial, estaba buscando para tal característica. –

+0

votó su comentario anterior, porque estoy de acuerdo, aumenta la legibilidad y le ahorra algo de tiempo – Milde

Cuestiones relacionadas