2009-03-23 11 views

risposta

14

Faccio questo molto, quindi sono anche in attesa di altre risposte.

Gli unici trucchi che conosco sono davvero elementari. Qui sono i miei migliori amici in Emacs durante il refactoring del codice:

M-x query-replace 

Questo ti permette di fare una ricerca globale e sostituire. Lo farai a lungo quando sposti metodi e dati di accesso comune ad altre classi o spazi dei nomi.

C-x 3 

Questo fornisce un display con due buffer affiancati. È quindi possibile procedere con il caricamento di file diversi e spostare il cursore da uno all'altro con C-x o. Questa è roba di base abbastanza, ma io ne parla a causa di quanto sia potente rende il prossimo ...

C-x (
(type any amount of stuff and/or emacs commands here) 
C-x) 

Questo è come si definisce una macro in emacs. Ogni volta che ti ritrovi a dover fare sempre la stessa cosa a un gruppo di codice (ed è troppo complesso per sostituire le query), questo è un vero toccasana. Se si incasina, è possibile premere C-g per interrompere la definizione della macro e quindi annullare (C-_) finché non si torna al punto di partenza. Le chiavi per richiamare la macro sono C-x e. Se vuoi farlo un po 'di volte, puoi premere Esc e digitare prima un numero. Ad esempio: Esc 100 C-x e proverà a richiamare la tua macro 100 volte.

(Nota: su Windows è possibile ottenere "Meta" premendo il tasto Esc o tenendo premuto Alt).

+2

Ci sono molti altri buoni strumenti. Vedi la risposta menzionando CEDET. Inoltre, utilizzo spesso tag TAGS e M-x-query-replace per rinominare tutte le corrispondenze in una ricerca di tag, che può estendersi su file sorgente. Vedi anche M-x grep-find, che semplifica la ricerca di tutte le occorrenze di un simbolo da sostituire. – slacy

+0

Ho provato a fare i mucchietti con i tag prima. Sembrava molto più difficile di quanto valesse. Forse durante un refactore ne varrebbe la pena? –

+25

Ma questo non è refactoring. Ciò sta procedendo manualmente e modificando l'intero programma. – vy32

6

Un mio amico stava giocando con xrefactory e ha detto che funzionava molto bene. Non è economico però.

+10

Non è gratis e non è libre. :( – ashawley

+0

Mentre questo è abbastanza vero, l'OP non ha chiesto una soluzione gratuita. :) Detto questo, xrefactory non ha visto un aggiornamento dal 2007, quindi potrebbe avere problemi nel refactoring del C++ 11 moderno e dei suoi discendenti . – mzuther

25

Se è possibile programmare in elisp, è possibile guardare alla combinazione di cedet + srecode da CEDET libraries - fornisce tutti gli strumenti per questa attività - trova i chiamanti di funzioni, ottiene la firma, ecc. Ma è necessario creare lo strumento di riparazione da soli, utilizzo di questi strumenti

+2

Basta guardare la pagina CEDET, questa sembra essere una risposta molto migliore di quella selezionata ... –

+2

(Modificato per aggiungere il collegamento alla pagina CEDET). Non sono sicuro di non essere d'accordo con Jared, ma dovrei provarlo. Il "hai bisogno di creare da solo uno strumento di riparazione" sembra un po 'onnipresente ... –

8

Per gli strumenti di refactoring e la regex semplice, poiché Emacs 22 è possibile incorporare espressioni arbitrarie arbitrarie nel testo sostitutivo, che consente di eseguire una manipolazione del testo incredibilmente potente. Steve Yegge ha scritto uno good article su questo un po 'di tempo fa.

+0

Wow. Quello è totalmente sasso. Ho usato emacs per così tanto tempo, non mi sono mai reso conto di averlo aggiunto. –

+6

Sì, ma questo non è il refactoring. – vy32

2

Sono assolutamente d'accordo sul fatto che find-and-replace funzioni bene. Tuttavia, una caratteristica veramente carina di cedet è "semantic-symref-list".

Con il cursore su un metodo, eseguire questo comando e verrà visualizzato un buffer che elenca tutti i punti del codice che fanno riferimento a questo tag.

È ancora possibile utilizzare trucchi find-and-replace e questo confermerà che sono stati modificati tutti i riferimenti.

4

Costruisci simboli cscope.

cercare il simbolo che si desidera refactoring.

arrivare nella finestra cscope, e iniziare una macro dopo aver piazzato il cursore sulla prima occorrenza

  • ret
  • cf vostro simbolo iniziare
  • navigare per iniziare del vostro simbolo
  • modificare la parola
  • cx o (torna a cscope)
  • n (per il successivo simbolo cscope)

bisogna solo c-x c-e ora

27

Nelle versioni recenti di Emacs (24), semantica è in grado di questo.

  1. Eventualmente attivare la modalità semantica M-x semantico-mode RET.
  2. Visualizzare il buffer Symref con C-c, g.
  3. Premere C-c C-e per aprire tutti i riferimenti.
  4. Rinomina con R.
+6

Credo che sia 'C-c, g' invece di quello che hai. – lfxgroove

+1

Bella soluzione !!! – Amumu

+0

Sfortunatamente, richiede l'ambiente POSIX. Cercando di usarlo su MS Windows 7 (senza Cygwin o minGw installato) ottengo "semantic-symref-tool-grep: Ricerca per programma: nessun file o directory, sh" dopo aver eseguito 'Cc, g' –

Problemi correlati