2012-03-29 11 views
17

Come rinominare una variabile in emacs? Eclipse ha un'accurata azione di refactoring "rinominare" che ti permette di rinominare una variabile in modo scoping-aware, che può essere molto più facile da usare rispetto alle sostituzioni localizzate, specialmente se il nome della variabile è un carattere come e. Emacs ha una funzionalità simile integrata?Emacs Rinomina variabile

+1

Quale linguaggio di programmazione vuoi dire? Giava? – Tom

+0

in questo momento sto guardando php, ma idealmente qualsiasi lingua. – nnythm

+0

Per quanto mi piaccia emacs, trovo la mancanza di questa funzionalità davvero fastidiosa. Forse ci sono alcune nuove risposte là fuori? – Mankka

risposta

7

iedit è stato creato per questo genere di cose.

+2

Iedit mentre un grande strumento di sostituzione fa solo la sostituzione, quindi non è adatto per la sostituzione intelligente (ad esempio se il nome della variabile è solo una lettera come il mittente messo) – Tom

+0

In realtà Iedit insieme a espansione-regione mi permettono di sostituire i simboli all'interno di un interessante ambito lessicale molto veloce. Questo è il mio strumento per rinominare le variabili in tutte le lingue. La lunghezza del simbolo non è veramente rilevante. –

2

Non sono sicuro di quale sia la lingua del codice sorgente. Perché hai menzionato su Eclipse, presumo che sia Java. Un'opzione è usare la funzionalità tags-query-replace. Utilizzare Excuberant Ctags con lo switch -e per generare tag di stile etgas e richiamare tags-query-replace.

7

È possibile utilizzare narrowing per mostrare solo parte di un buffer e la ricerca/sostituzione funzionerà solo nella regione ristretta. Ad esempio, è possibile utilizzare C-x n d per restringere la funzione corrente o selezionare la regione desiderata e fare C-x n n. Fai la tua ricerca/sostituisci, quindi allarga di nuovo con C-x n w. Per una variabile a lettera singola come e, fare un query-replace-regexp con C-M-% e utilizzare un'espressione regolare come \be\b in modo che funzioni solo sui singoli e anziché su altre parole.

Modifica: Ho solo pensato ad un'altra cosa. Se si seleziona una regione, la ricerca/sostituzione funziona solo in quell'area. Quindi è sufficiente selezionare l'ambito che si desidera sostituire, quindi fare la cosa query-replace-regexp.

13

Nuovo Emacs ha M-s . per selezionare il simbolo sotto il cursore, quindi è possibile C-M-% e utilizzerà il simbolo attualmente selezionato per eseguire sostituzioni. NOTA Questa è solo una semplice sostituzione di stringhe, non come la funzione 'rename variable' di IDE.

+2

Questa è una grande risposta per Emacs. Ma non sono assolutamente d'accordo con nessuno che abbia bisogno di una funzionalità di rinominazione variabile basata sull'oscilloscopio, come previsto dagli IDE Java. – ntc2

+2

La ridenominazione sensibile al contesto è la mia caratteristica più utilizzata negli IDE. Ne ho assolutamente bisogno. – byxor

2

In Python, questo è più o meno fattibile con la libreria di refactoring di Rope, per la quale consiglio di usare emacs-traad, in MELPA (semplice da installare e facile da usare).

Dopo l'installazione abbiamo la funzione M-x traad-rename che rinomina una variabile nel progetto.

Per una ricerca più semplice & sostituire, abbiamo il suddetto iEdit e anche Proiettile di projectile-replace.

0

Dato che hai chiesto una funzione Eclipse, Iedit non lo taglierà. Non è così intelligente, cosa succede se hai due variabili con lo stesso nome su diversi ambiti? Li cambierebbe entrambi. Questo non succede su Eclipse! Avrai bisogno di uno strumento specifico per la lingua se ti aspetti questo tipo di consapevolezza.

Con dattiloscritto è possibile utilizzare tide. Con golang puoi usare go-doctor. In particolare con Java, non sono riuscito a trovare nulla, ma io uso meghanada, che è ottimo. Ma il refactoring è nella sua lista TODO! Si usa anche emacs come client per eclipse con eclim.

0

Oltre a considerare lo iedit già consigliato, è possibile considerare anche il pacchetto multiple-cursors. Dai un'occhiata a article, con l'animazione dell'edizione live.