2012-03-29 32 views
17

¿Cómo cambio el nombre de una variable en emacs? Eclipse tiene una acción de refactorización ordenada que le permite cambiar el nombre de una variable en una forma de scoping-aware, que puede ser mucho más fácil de usar que hacer cadenas de reemplazo localizadas, especialmente si el nombre de la variable es un carácter como e. ¿Tiene emacs una funcionalidad similar incorporada?Emacs Cambiar el nombre de la variable

+1

¿Qué lenguaje de programación se refiere? ¿Java? – Tom

+0

en este momento estoy buscando php, pero idealmente cualquier idioma. – nnythm

+0

Por mucho que me gusten los emacs, encuentro que la falta de esta característica es realmente molesta. Tal vez hay algunas respuestas nuevas por ahí? – Mankka

Respuesta

7

iedit está hecho para este tipo de cosas.

+2

iedit mientras que una gran herramienta de reemplazo solo reemplaza tontamente, por lo que no es adecuado para un reemplazo inteligente (por ejemplo, si el nombre de la variable es solo una letra como lo dijo el asker) – Tom

+0

En realidad, junto con expand-region me permiten reemplazar símbolos dentro de alcance léxico interesante muy rápido. Esta es mi herramienta para cambiar el nombre de las variables en todos los idiomas. La longitud del símbolo no es realmente relevante. –

2

No estoy seguro de cuál es el idioma del código fuente. Como mencionó sobre Eclipse, supongo que es Java. Una opción es usar la funcionalidad tags-query-replace. Utilice Excuberant Ctags con el interruptor -e para generar etiquetas de estilo etgas e invocar tags-query-replace.

7

Puede usar narrowing para mostrar solo parte de un búfer, y buscar/reemplazar solo operará en la región angostada. Por ejemplo, puede usar C-x n d para restringir a la función actual, o seleccionar la región que desea y hacer C-x n n. Haga su búsqueda/reemplazo, luego ensanche de nuevo con C-x n w. Para una variable de una sola letra como e, realice un query-replace-regexp con C-M-% y use una expresión regular como \be\b, por lo que solo funcionará en los e's individuales en lugar de en otras palabras.

Editar: Sólo he pensado en otra cosa. Si selecciona una región, buscar/reemplazar solo funciona en esa área. De modo que puede seleccionar el ámbito en el que desea reemplazar y luego hacer lo query-replace-regexp.

13

Nuevo Emacs tiene M-s . para seleccionar el símbolo debajo del cursor, luego puede C-M-% y usará el símbolo seleccionado actualmente para realizar reemplazos. NOTA Esto es simplemente reemplazo de cadena, no como la función IDE 'rename variable'.

+2

Esta es una gran respuesta para Emacs. Pero estoy totalmente en desacuerdo con que nadie necesite una característica de cambio de nombre compatible con el alcance, tal como lo proporcionan los IDEs de Java. – ntc2

+2

El cambio de nombre sensible al contexto es mi función más utilizada en IDEs. Definitivamente lo necesito – byxor

2

En Python, esto es más o menos factible con la biblioteca de refactorización Rope, para la cual aconsejo usar emacs-traad, en MELPA (fácil de instalar y fácil de usar).

Después de la instalación tenemos la función M-x traad-rename que cambia el nombre de una variable en el proyecto.

Para la búsqueda simple & sustituir, que tienen el ya mencionado Iedit y también Proyectil de projectile-replace.

0

Como solicitó una característica de Eclipse, Iedit no la cortará. No es tan inteligente, ¿qué pasa si tienes dos variables con el mismo nombre en diferentes ámbitos? Cambiaría a ambos. ¡Esto no sucede en eclipse! Necesitará una herramienta específica de idioma si espera ese tipo de conocimiento.

Con mecanografiado puede usar tide. Con golang puede usar go-doctor. Específicamente con Java, no pude encontrar nada, pero uso meghanada, lo cual es genial. ¡Pero la refactorización está en su lista de TODO! También usas emacs como cliente para eclipse con eclim.

0

Además de considerar el ya sugerido iedit, también puede considerar el paquete multiple-cursors. Eche un vistazo a article al respecto, con la animación de la edición en vivo.

Cuestiones relacionadas