¿Buscar y reemplazar a través de un proyecto de múltiples archivos en AUCTeX?


8

Estoy a punto de adoptar Emacs para ser el único editor que uso en todo lo que estoy escribiendo, incluidos los documentos de LaTeX. Vengo del editor WYSIWYG que cumplió con ese propósito bastante agradable, es decir, TexStudio o TXS para abreviar. Para la transición de TXS a Emacs, todavía me falta la forma en que TXS trata de ejecutar la búsqueda y reemplazo masivo de consultas regexp con resaltar las coincidencias y restringir la búsqueda solo a los .texarchivos relacionados con el proyecto . Echo mucho de menos eso en Emacs ahora. Vea una captura de pantalla de TXS a continuación:

TeXStudio Query en un proyecto LaTeX multifile ingrese la descripción de la imagen aquí

Me gustaría enfatizar los puntos en el flujo de trabajo a lograr en Emacs:

  1. RegExp Query Search and Replacement solo en los .texarchivos relacionados con el proyecto .
  2. Destacando los partidos
  3. Una visión general de los resultados resaltados en un diseño manejable (similar a la vista de registro de MagitEmacs cuando presiona lseguido de otro lo simplemente como C-x den modo Dired
  4. Cómo saber cuántas coincidencias de reemplazo o inspección realizadas con o restantes y una forma de reanudar la consulta en caso de que se rompa por una torpe pulsación de tecla que detiene la consulta
  5. Una forma limpia de salir de esta consulta desordenada al cerrar y guardar todos los archivos relacionados y volver al estado antes de invocar esta consulta

Leí esta publicación, pero mi intención es ser más como para CWque cualquiera pueda compartir su mejor flujo de trabajo para hacer este trabajo común. Mi enfoque actual es el siguiente:

Primer flujo de trabajo

  1. El modo directo % gmarcará todos los archivos que contengan esa expresión regular. Contras: esto incluirá incluso archivos no relacionados con el proyecto, incluidos archivos que no sean .tex.
  2. C-x 3 abre un nuevo búfer mientras mantengo un ojo en el primer búfer como mi visión general de orientación de los archivos marcados que tengo que consultar en el nuevo búfer individualmente
  3. Ejecutando la consulta por C-c q. Tiene interruptores muy agradables como !reemplazar todo sin preguntar más resaltar coincidencias dentro del archivo abierto. Pero esto significa que tengo que ejecutar la misma consulta cada vez y para cada archivo marcado.
  4. Después de hacer todos los archivos marcados, presioné C-x s !para guardar todo en una sola pulsación. ¡Uf!

ingrese la descripción de la imagen aquí

Segundo flujo de trabajo: preferido

  • Marcar todos los .texarchivos usando % mdentro del modo Dired mediante regexp para marcar solo .texarchivos, por lo que, básicamente, la ejecución \.texme llevará allí.
  • C-x 3 igual que el anterior para mantener un búfer para visión general y el otro para consulta
  • La ejecución Qdentro de Dired, que es la consulta, reemplaza regexp solo en archivos marcados . Alternativamente, Asolo es una consulta de búsqueda regexp. Se ejecutará una consulta completa y ?se proporcionará generosamente un menú de ayuda
  • C-x s !guardar y cerrar todo el desorden. De lo contrario, tuve que cerrar los archivos abiertos uno por uno, lo cual es tedioso. Espero que haya una manera de cerrar solo a aquellos a quienes molestamos.

ingrese la descripción de la imagen aquí

¿Cómo puedo aproximar la consulta de búsqueda / reemplazo de expresiones regulares de TXS en múltiples archivos?

Nota

  • Emacs 24.4 en Windows 7

Actualmente, esta pregunta tiene un voto "cerrado" por ser demasiado amplia, y estoy dispuesto a estar de acuerdo. ¿Podría por favor limitar la pregunta a una versión más discreta (tal vez en la línea de "¿cómo puedo aproximar la búsqueda de consulta de expresiones regulares de TeXStudio en varios archivos")? "¿Cuál es tu mejor flujo de trabajo?" es muy amplio y es probable que produzca respuestas largas y basadas en opiniones.
Dan

No puedo escribir una respuesta completa en este momento, pero deberías buscar wgrep.
Malabarba

@Malabarba, considere actualizar su comentario a una respuesta si cree que esto satisfará los criterios mencionados en la publicación.
doctorado

Respuestas:


3

Si entendí correctamente, desea buscar patrones de texto en su proyecto, entonces puede usar Projectile junto con Helm.

  • M-x helm-projectile-grep
  • Escriba patrón de texto o patrón de expresiones regulares.
  • Ver resultados actualizados para cada personaje ingresado.

Aquí hay una demostración de helm-projectile-grep:

helm-proyectil-grep

Puede guardar en un búfer separado para referirse más tarde usando Save results in grep bufferaction` (cambia a buffer de acción usando TAB, por defecto).

Si no has oído hablar de Helm, puedes leer mi tutorial de Helm . Visite mi tutorial de Helm Projectile para obtener más demostraciones y orientación sobre Helm Projectile.

Alternativa, también puede usar rgrep, que está integrado:

  • M-x rgrep
  • Ingrese el patrón text / regex en la Search for:solicitud, es decir, "prueba"
  • Ingrese el tipo de archivo para buscar Search for "test" in file:, es decir *.tex.
  • Ingrese el directorio para buscar recursivamente (de ahí el nombre rgrep).
  • Presione RETy vea los resultados.

Una rgrepdemostración:

ingrese la descripción de la imagen aquí

Con respecto a sus criterios:

  1. RegExp Query Search and Replacement solo en los .texarchivos relacionados con el proyecto .

Helm y rgrepsoportan esta característica.

  1. Destacando los partidos

Lo mismo que arriba.

  1. Una visión general de los resultados resaltados en un diseño manejable.

Lo mismo que arriba.

  1. Cómo saber cuántas coincidencias de reemplazo o inspección realizadas con o restantes y una forma de reanudar la consulta en caso de que se rompa por una torpe pulsación de tecla que detiene la consulta

Si desea reemplazar las coincidencias, puede usar wgrep para realizar el reemplazo de un *Grep*búfer. Una vez que termine y sincronice el *Grep*búfer, todo se reemplazará de acuerdo con el texto que reemplazó.

Usted "reanuda" ejecutando la consulta nuevamente si la detiene accidentalmente. Pero al usar Helm, tiene un helm-resumecomando que lo reanuda a la operación anterior si la cancela accidentalmente.

  1. Una forma limpia de salir de esta consulta desordenada al cerrar y guardar todos los archivos relacionados y volver al estado antes de invocar esta consulta

En realidad, no tiene que matar ningún búfer si usa herramientas como helm-mini . Administrar miles de buffers abiertos es muy sencillo: puede reducir sus buffers deseados con un patrón de texto corto. Puedes matar a todos a la vez si quieres.

Aquí hay una demostración de helm-mini:

helm-mini

Consulte la explicación detallada en la página Helm Github, en la sección "Uso avanzado" .


Creo que tengo que intentar estudiar proyectiles con timón. ¡Gracias por sus tutoriales ricos en capturas de pantalla!
doctorado

que paquetes necesito instalar para conseguir estas funciones decente: projectile, helmy helm-projectilees obvio, ¿qué más? Además, ¿hay dos paquetes de MELPA helm-pojectiley helm projectile-allalguna recomendación aquí?
Doctorado

Eso ya es suficiente. Luego, siga la configuración en mis guías. Debes consultar la Installationsección en mis guías de Helm and Helm Projectile.
Tu Do

¿en qué pulsaciones de teclas utiliza rgreppara visitar las coincidencias (hacia adelante o hacia atrás) en el búfer superior e inferior?
Doctorado

1
fue una experiencia de cambio de Emacs para conocer timón y proyectil de timón, ¡Gracias! Pero, la búsqueda grep no funciona. ¿Puedes mirar esta publicación: emacs.stackexchange.com/q/7178/2443
doctorado

5

Si entendí lo que quieres, RefTeX ' reftex-isearch-minor-modedebería ser lo que buscas. De su descripción en el manual:

Alternar un modo menor que permite que la búsqueda incremental funcione globalmente en todo el documento de múltiples archivos. Los archivos se buscarán en la secuencia en que aparecen en el documento.

Según lo informado por T. Verron, esto también funciona con expresiones regulares.

Para habilitar este modo menor en todos los búferes * TeX, agregue una de las siguientes líneas a su archivo init

(add-hook 'TeX-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for AUCTeX
(add-hook 'tex-mode-hook (lambda () (reftex-isearch-minor-mode))) ; for the Emacs' bultin TeX mode.

Es bueno saber que uso reftex. Pero como no se admite regexp, dudo que este enfoque sea mejor.
doctorado

2
Aparentemente, presionar M-ren el búfer de búsqueda cambia a búsqueda de expresiones regulares, al igual que lo hace para regular isearch.
T. Verron

1
Y el atajo habitual para regexp isearch ( C-M-s) también funciona.
T. Verron

@ T.Verron gracias! En realidad, no he usado esta función ampliamente, la última vez que lo probé la búsqueda de ;-)
expresiones regulares

@ T.Verron desde la barra de menú-> ref-> acciones globales-> buscar versión y reemplazar versión para todo el documento proporciona una mejor expresión regular ya que puede editar su expresión mientras está en el minibúfer, pero no sé qué función es esta y qué es La combinación de teclas.
Doctorado

3

En caso de que no lo sepa, puede abrir Dired solo en un conjunto particular de archivos (ubicados en cualquier directorio, en cualquier lugar). IOW, puede usar Dired como punto de entrada para todos los archivos de un proyecto. Las características habituales de Dired funcionan en este contexto: operar en archivos marcados, etc.

Si usa la biblioteca Bookmark +, entonces puede tener marcadores Dired que use para darle diferentes "vistas" de diferentes conjuntos de archivos, sus marcas, etc.

(Emacs Wiki está inactivo por mantenimiento actualmente, y por unos días más, por lo que ese enlace está temporalmente inaccesible).


¿Es como el estrechamiento de Emacs C-x n n? ¿Puede por favor enriquecer su respuesta con más detalles? Gracias.
doctorado

No; nada que ver C-x n n, solo una característica poco conocida de Dired. C-h f diredle dice que puede pasar como argumento una lista de nombres (por ejemplo, absolutos) de archivo (y directorio) en lugar de un nombre de directorio. Esa es la clave Library Dired + facilita el uso de esta forma interactiva. (Pero, de nuevo, la wiki es temporalmente, de modo que enlazan demasiado no está disponible en este momento.)
dibujó
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.