2012-01-20 23 views
10

Me gusta hacer mi desarrollo Scala en Emacs, y de vez en cuando, uso REPL para probar fragmentos de código o cargar y probar algún código que acabo de escribir. Estoy usando Scala 2.9.1, y me he dado cuenta de que cuando abro el REPL en un buffer de terminal, las cosas se rompen sustancialmente. En particular, no puedo eliminar ningún carácter de la línea actual y no puedo mover el cursor hacia atrás en la línea actual. Esto es muy frustrante ya que cada vez que escribo mal algo, tengo que comenzar de nuevo el comando. Me preguntaba si alguien más está teniendo este problema usando el Scala REPL bajo Emacs, y si alguien tiene una solución potencial.Scala REPL en Emacs

+0

¿Cómo comienza REPL dentro de Emacs? – leedm777

+0

Abro un nuevo buffer con ansi-term. Luego, en ese búfer de terminal, comienzo el REPL llamando directamente a "scala" o usando la consola sbt. De cualquier manera, este problema parece ocurrir. – nomad

+1

Puede tener mejor suerte abriendo un nuevo búfer con shell e iniciando scala o sbt desde el shell. – leedm777

Respuesta

8

Encuentro que rlwrap (readline wrapper) funciona bien con emacs 'ansi-term y scala. Simplemente llame a "rlwrap scala", y tendrá la edición habitual de la línea bash, así como el historial, funcionando correctamente. Como beneficio adicional, su historial abarcará múltiples invocaciones de scala, por lo que no perderá todo lo que haya tipeado después de salir de Scala REPL.

Si rlwrap no funciona para usted, simplemente cambiar al modo de línea en ansi-term (Cx Cj por defecto) le permitirá usar la edición de estilo emacs en la línea, pero sin las sutilezas de shell como historial y terminación.

Ensime ya se ha mencionado, así que lo mencionaré como una excelente opción si no le molesta la instalación.

+0

Gracias por la sugerencia. Esto parece funcionar bastante bien para mí. De hecho, me gusta el enfoque de rlwrap sobre el enfoque de Ensime porque me da un historial de comandos. En este momento, la única limitación restante para invocar el REPL a través de Emacs utilizando el enfoque rlwrap es la imposibilidad de utilizar la finalización de tabulación. – nomad

+0

¿Cómo obtuviste la finalización de las pestañas en el REPL a través de emacs? – CodeKingPlusPlus

7

Puede instalar ENSIME y follow instructions. No sé cómo invocar REPL, pero REPL llamado desde ENSIME funciona (permite mover el cursor hacia atrás y borrar símbolos, lo he comprobado).

+2

Gracias por la sugerencia. Parece que invocar el REPL de Ensime soluciona este problema, pero introduce algunos otros. En particular, el REPL invocado a través de Ensime no tiene un historial de comandos, y no parece capaz de completar pestañas. – nomad

+1

+1 para ENSIME, ENSIME es genial –

Cuestiones relacionadas