我不是在寻找IDE或集成的REPL。我只是想问一下是否有人知道是否有可能在REPL中有一个缓冲编辑器,如'psql'或某些* nix shell所知。
在psql中,例如你输入“\ e”,你将获得编辑器中的最后一个命令,并且uppon退出它将被执行。
这对于clojure repl来说非常棒。
$ java -cp jline.jar:clojure-1.3.0.jar jline.ConsoleRunner clojure.main
那么,有这样的功能吗?在jline中它必须在哪里实现?
解决方案:
rlwrap可以解决问题。
我必须编译readline ftp://ftp.gnu.org/gnu/readline/然后rlwrap http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap。
之后我可以使用以下快捷方式启动编辑器。
Ctrl + ^
rlwrap -m -- java -cp clojure-1.3.0.jar clojure.main
对于在Mac OSX上使用leiningen,我必须更改以下内容:
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 ----
并导出RLWRAP_EDITOR
export RLWRAP_EDITOR="vim +%L"
答案 0 :(得分:8)
<强> rlwrap 强>
有多种方法可以实现您的目标,但 rlwrap 二进制文件可以满足您的需求。我在过去的Mac OS X上也遇到过jline版本问题,所以停止使用它。
当我在终端中输入'clj'时,它真的通过/usr/local/bin/clj
中的以下bash脚本执行用rlwrap包装的REPL:
#!/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 "$@"
将脚本放在路径中的任何位置,以便使用。
最后,你不需要脚本,我只是为了方便起见。如果rlwrap在你的系统上并且clj在你的路径中,那么你只需键入:
rlwrap clj
进一步阅读Clojure维基书:Enhancing Clojure REPL with rlwrap
答案 1 :(得分:6)
查看我对问题One REPL to bind them all?和How to install Clojure on Ubuntu 10.04 from Github repo with no clojure.jar的回答。要点:
rlwrap
或其他一些readline程序。