2009-03-23 31 views

Respuesta

14

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).

+2

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

+0

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? –

+25

Pero esto no es una refactorización. Esto se realiza manualmente y edita todo su programa. – vy32

6

Un amigo mío estaba jugando con xrefactory y dijo que funcionó bastante bien. No es barato sin embargo.

+10

No es gratis y no es libre. :( – ashawley

+0

Si bien esto es bastante cierto, OP no solicitó una solución gratuita. :) Dicho esto, xrefactory no ha visto una actualización desde 2007, por lo que podría tener problemas para refaccionar el C++ 11 moderno y sus descendants . – mzuther

25

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

+2

Simplemente mirando la página CEDET, esta parece ser una respuesta mucho mejor que la seleccionada ... –

+2

(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 ... –

8

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.

+0

Wow. Eso es totalmente rockero. He estado usando emacs por tanto tiempo, nunca me di cuenta de que lo agregaron. –

+6

Sí, pero esto no es refactorización. – vy32

2

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.

4

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

27

En versiones recientes de Emacs (24), semántica es capaz de esto.

  1. activar Posiblemente modo semántico-x M-modo semántica RET.
  2. Abra el buffer Symref con C-c, g.
  3. Presione C-c C-e para abrir todas las referencias.
  4. Renombrar con R.
+6

Creo que es 'C-c, g' en lugar de lo que tienes. – lfxgroove

+1

¡¡¡Buena solución !!! – Amumu

+0

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' –

Cuestiones relacionadas