2012-01-11 11 views
6

No estoy buscando un IDE o REPL integrado. Solo quería preguntar si alguien sabe si es posible tener un editor de búfer en el REPL como se conoce por 'psql' o algunos * nix shells.Clojure estándar REPL con editor de búfer?

En psql, por ejemplo, simplemente ingrese "\ e" y obtendrá el último comando en su EDITOR y la salida de uppon se ejecuta.

Esto sería genial para clojure repl.

$ java -cp jline.jar:clojure-1.3.0.jar jline.ConsoleRunner clojure.main 

Entonces, ¿existe tal característica? ¿Dónde debería implementarse, en jline?

Solución:

rlwrap hace el truco.

Tuve que compilar readline ftp://ftp.gnu.org/gnu/readline/ y luego rlwrap http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap.

Después de eso, pude usar el siguiente atajo para iniciar el editor.

Ctrl + ^

rlwrap -m -- java -cp clojure-1.3.0.jar clojure.main

Para el uso con Leiningen en Mac OS X que tenía que cambiar el siguiente:

lein 1.6.2 
*** 226,233 **** 
       rlwrap -m -q '"' echo "hi" > /dev/null 2>&1 
       if [ $? -eq 0 ]; then 
        RLWRAP="$RLWRAP -r -m -q '\"'" 
-    else 
-     RLWRAP="$RLWRAP -m --" 
       fi 
      fi 
     fi 
--- 226,231 ---- 

y exportación RLWRAP_EDITOR

export RLWRAP_EDITOR="vim +%L"

Respuesta

8

rlwrap

Hay varias maneras de lograr lo que quiere, pero el binario rlwrap hace lo que necesita. También tuve problemas con el control de versiones de jline en Mac OS X, así que dejé de usarlo.

Cuando escribo 'CLJ' en mi terminal, lo que realmente ejecuta el REPL envuelto con rlwrap a través de la siguiente secuencia de comandos bash, en /usr/local/bin/clj:

#!/bin/sh 
# Runs clojure. 
# With no arguments, runs Clojure's REPL. 

CLOJURE=$CLASSPATH:/usr/local/clojure/1.3.0/clojure-1.3.0.jar 

rlwrap java -cp $CLOJURE clojure.main "[email protected]" 

Ponga la secuencia de comandos en cualquier lugar en su camino, a utilizar.

Finalmente, no necesita el script, solo lo tengo como una conveniencia. Si rlwrap está en su sistema y CLJ se encuentra en su camino, entonces simplemente puede escribir:

rlwrap clj

Además lectura del libro wiki Clojure: Enhancing Clojure REPL with rlwrap

+0

Gracias por la sugerencia de rlwrap, que hace el truco. –

6

Ver mis respuestas a las preguntas One REPL to bind them all? y How to install Clojure on Ubuntu 10.04 from Github repo with no clojure.jar . Puntos principales:

  • No "instale" clojure en absoluto. Instale Leiningen y deje que administre las versiones de clojure que tiene, así como también obtenga los classpaths adecuados para repl u otro uso.
  • Si debe iniciar clojure a mano, use rlwrap o algún otro programa readline.
+0

Gracias por la sugerencia, obtener la función con leiningen habría sido mi segundo paso. Pensé que sería más simple sin Pero hasta donde puedo ver, leiningen usa rlwrap automáticamente si está presente. –

Cuestiones relacionadas