Me interesan principalmente los cambios automáticos en C++ y método/clase/firma.¿Cómo puedo refactorizar el código fuente de C++ usando emacs?
Respuesta
Hago esto mucho, así que estoy esperando atentamente otras respuestas también.
Los únicos trucos que conozco son realmente básicos. Aquí están mis mejores amigos en Emacs al refactorizar código:
M-x query-replace
Esto le permite hacer una búsqueda global y reemplazar. Harás muchísimo cuando muevas los métodos y los datos accedidos comúnmente a otras clases o espacios de nombres.
C-x 3
Esto le ofrece una pantalla con dos búferes uno al lado del otro. A continuación, puede continuar cargando diferentes archivos en ellos y mover el cursor de uno a otro con C-x o
. Esto es bastante cosas básicas, pero lo menciono porque de lo poderoso que hace que el siguiente ...
C-x (
(type any amount of stuff and/or emacs commands here)
C-x)
Esta es la forma de definir una macro en emacs. Cada vez que se ve en la necesidad de hacer lo mismo una y otra vez con un montón de código (y es demasiado complejo para el reemplazo de consultas), esto es un salvavidas. Si se equivoca, puede presionar C-g
para detener la definición de macro y luego deshacer (C-_
) hasta que regrese al punto de partida. Las claves para invocar la macro son C-x e
. Si quiere hacerlo un montón de veces, puede presionar Esc
y escribir primero un número. Por ejemplo: Esc 100 C-x e
intentará invocar su macro 100 veces.
(Nota: en Windows puede obtener "Meta" presionando la tecla Esc, o manteniendo presionada la tecla Alt).
Un amigo mío estaba jugando con xrefactory y dijo que funcionó bastante bien. No es barato sin embargo.
Si puede programar en elisp, puede ver la combinación de cedet + srecode de CEDET libraries - proporciona todos los instrumentos para esta tarea - encuentre llamadores de funciones, obtenga la firma, etc. Pero usted mismo necesita crear la herramienta de reparación, usando estos instrumentos
Simplemente mirando la página CEDET, esta parece ser una respuesta mucho mejor que la seleccionada ... –
(Editado para agregar el enlace de la página CEDET). No estoy seguro de estar en desacuerdo con Jared, pero tendría que intentarlo. La herramienta "usted necesita crear una herramienta refactory para usted mismo" parece un tanto omnipresente ... –
En algún lugar entre las herramientas de refactorización y la expresión regular simple, dado que Emacs 22 puede incrustar expresiones elisp arbitrarias en su texto de reemplazo, lo que le permite hacer una manipulación de texto increíblemente poderosa. Steve Yegge escribió un good article en esto hace un tiempo.
Wow. Eso es totalmente rockero. He estado usando emacs por tanto tiempo, nunca me di cuenta de que lo agregaron. –
Sí, pero esto no es refactorización. – vy32
Estoy totalmente de acuerdo en que encontrar y reemplazar funciona bien. Sin embargo, una característica realmente agradable de cedet es 'semántica-symref-list'.
Con el cursor en un método, ejecute este comando, y se le presentará un búfer que enumera todos los lugares en su código que hacen referencia a esta etiqueta.
Aún puede usar los trucos de buscar y reemplazar, y esto confirmará que ha cambiado todas las referencias.
Crear símbolos de cscope.
busque el símbolo que desea refactorizar.
entrar en la ventana cscope, y empezar una macro después de colocar el cursor en la primera aparición
- ret
- cf el símbolo de inicio
- navegar hasta el inicio de su símbolo
- modificar la palabra
- cx o (volver al cscope)
- n (para el próximo símbolo del cscope)
tienes que acaba de C-x C-e ahora
En versiones recientes de Emacs (24), semántica es capaz de esto.
- activar Posiblemente modo semántico-x M-modo semántica RET.
- Abra el buffer Symref con C-c, g.
- Presione C-c C-e para abrir todas las referencias.
- Renombrar con R.
Creo que es 'C-c, g' en lugar de lo que tienes. – lfxgroove
¡¡¡Buena solución !!! – Amumu
Desafortunadamente, requiere un entorno POSIX. Al tratar de usarlo en MS Windows 7 (sin Cygwin ni minGw instalado) obtengo "semántica-symref-tool-grep: buscando un programa: no existe tal archivo o directorio, sh" después de ejecutar 'Cc, g' –
Hay una nueva herramienta que hace uso de emacs marco a modo de semántica:
demostraciones impresionantes: https://github.com/tuhdo/semantic-refactor/blob/master/srefactor-demos/demos.org
conseguir con M-x paquete a instalar de Melpa o al https://github.com/tuhdo/semantic-refactor/.
- 1. ¿Cómo puedo refactorizar el código fuente de Clojure?
- 2. Usando minted (paquete de código fuente LaTeX) con emacs/auctex
- 3. C# refactorizar código si-else
- 4. Eclipse cómo refactorizar el comentario fuente de Javadoc?
- 5. ¿Cómo refactorizar el código heredado de manera efectiva y eficiente?
- 6. ¿Qué significa el código fuente^L in (Emacs Lisp)?
- 7. ¿Cómo puedo hacer Emacs auto-sangrando mi código C?
- 8. Refactorizar/reescribir el código o continuar?
- 9. C++ código fuente de vector
- 10. No se puede abrir el código fuente C de las funciones de Emacs
- 11. ¿Cómo puedo descargar código fuente HTML en C#
- 12. Características de navegación del código fuente de Emacs
- 13. ¿Cómo puedo hacer mejor la exploración de código fuente dentro de Emacs?
- 14. API para refactorizar programáticamente el código Java
- 15. ¿Cómo puedo verificar si existe un archivo usando Emacs Lisp?
- 16. ¿Cómo descargo el código fuente usando svn en OS X?
- 17. Cómo refactorizar este código LINQ duplicado?
- 18. C# .net código fuente
- 19. ¿Cómo puedo refactorizar la cláusula else requerida?
- 20. Cómo usar expresiones regulares con el código de búsqueda/reemplazo de Eclipse para refactorizar el código
- 21. ¿Cómo puedo obtener el código fuente HTML de TWebBrowser
- 22. ¿Cómo puedo ver el código fuente de Flash?
- 23. ¿Cómo puedo ordenar automáticamente el código fuente de Perl?
- 24. ¿Cómo puedo indexar nuestro código fuente interno?
- 25. ¿Cómo puedo indexar mi código fuente?
- 26. ¿Cómo resaltar el código fuente en HTML?
- 27. Problema de deserialización con NetDataContractSerializer después de refactorizar el código
- 28. ¿Cómo puedo enlazar C- = en emacs?
- 29. ¿Cómo puedo visualizar el código fuente de Fortran (90 o posterior), p. usando Graphviz?
- 30. ¿Dónde puedo encontrar un buen código fuente de C++?
También hay muchas otras buenas herramientas. Vea la respuesta mencionando CEDET. Además, con frecuencia uso etiquetas TAGS y M-x-query-replace para cambiar el nombre de todas las coincidencias a una búsqueda de etiquetas, que puede abarcar los archivos fuente. Ver también M-x grep-find, que hace que sea fácil encontrar todas las apariciones de un símbolo para reemplazar. – slacy
He intentado quitar etiquetas con anterioridad. Parecía mucho más problemático de lo que valía. Quizás durante un refactor valdría la pena sin embargo? –
Pero esto no es una refactorización. Esto se realiza manualmente y edita todo su programa. – vy32