2012-06-21 7 views
19

suponga que tiene un texto con palabras como estas en el interior:.Emacs reemplazo de expresiones regulares interactiva

"foo" ... "bar" ... "file" ... "emacs" 

y todo lo que quiere hacer es reemplazar "con '' Sé que se puede hacer sólo piden el siguiente reemplazo:

" -> '' 

pero supongamos que desea hacerlo de forma interactiva y con expresiones regulares, para el caso más complicado, ¿cómo puede hacerse

me explico mejor:? me gustaría poder tener una de comandos, o una serie de ellos, para trabajar de esta manera:

  • Escribir una expresión regular como "\\(.*?\\)" y ver los resultados de forma interactiva (es decir, Las coincidencias actualmente visibles se resaltan a medida que edita la expresión regular y el resaltado siempre se actualiza a medida que realiza cambios.
  • Una vez satisfecho con la expresión regular, especificar un recambio, como ' '\1' '
  • interactiva reemplazar todos los ajustes
+0

¿qué quieres decir "recursivamente"? –

+0

event_jr: Actualicé la pregunta en función de la respuesta de Luigi, y reformulé esa parte en el proceso, ya que no parecía ser relevante. – phils

Respuesta

19

¡¡Finalmente lo he descubierto !!!!! Estos son los pasos a seguir:

  • M-x isearch-forward-regexp

  • Inserte su expresión regular de forma interactiva. Si comete un error, puede usar DEL o M-e y navegar a través de su expresión regular para corregirlo.

  • Luego, después de que haya encontrado lo que desea, presione inmediatamente M% y la sustitución que desee y comience a reemplazar.

Para que pueda buscar y reemplazar con regex de una manera totalmente interactiva e incremental.

+1

Buen descubrimiento. En mi instalación 'isearch-forward-regexp' está obligado a' C-M-s'. –

+2

'M-x isearch-describe-bindings' (o' C-s C-h C-h b') vale la pena leer. – phils

7

¿Tiene el comando query-replace-regexp satisfacer sus necesidades? En la mayoría de las instalaciones de Emacs estará obligado a C-M-%.

Dado que eso no cumple con los requisitos de OP, sugiera buscar también en re-builder. Esta función no está documentada en el manual de Emacs ni en el sistema de ayuda; está documentada en el Emacs Lisp manual.

+0

query-replace-regexp no es interactivo, o mejor, incremental. Me gustaría tener una forma incremental para ver lo que coincide –

+0

No funcionó, así que para mí, no es interactivo ni incremental. ¿Tienes alguna idea de por qué? He descargado emacs a través de apt-get. Por cierto, publiqué la solución que funciona bien en mi caso. –

+0

(lo siento, borré mi primer comentario mientras agregabas tu respuesta). No había entendido que querías resaltar incrementos de coincidencia * mientras construías la expresión regular *, por lo que estaba confundido. Entiendo lo que estabas buscando ahora. – phils

7
  • Ejecutar o M-x isearch-forward-regexpC-M-s.

  • Al comenzar a escribir una expresión regular, la primera aparición se resaltará instantáneamente. Intentar retroceder a través de la expresión regular con el cursor cancelará la búsqueda, por lo que si comete un error, debe usar M-e para permitir la edición, realizar el cambio, luego presionar enter para continuar la búsqueda.

  • Cuando esté satisfecho con la expresión regular, presione M-%, escriba una cadena de reemplazo (o use la tecla de navegación hacia arriba para acceder a las cadenas de reemplazo usadas anteriormente), luego presione RET para comenzar la sustitución interactiva.

  • Para cada aparición, pulse y para reemplazar una vez, n para saltar, ! para reemplazar todo, RET para salir o ? para ver más opciones.

  • Para repetir su última búsqueda en expresiones regulares, ingrese C-M-s y luego C-s.

Más detalles están en el manual page.

+0

Realmente quería agregar algunos detalles a [la respuesta de Luigi] (http://stackoverflow.com/a/11137064/201665), pero como mi edición se rechazó, la publico como una respuesta separada. –

+0

Que la fuerza te acompañe. Con amor, –

Cuestiones relacionadas