Clojure的REPL非常方便,可以随时随地试验你的想法,REPL是read-eval-print-loop的简称。默认clojure.contrib有带一个shell脚本来启动REPL,具体看
这里。你也可以用JLine来增强REPL:
java
-
cp
"
%CLOJURE_DIR%\jline-VERSION.jar;%CLOJURE_JAR%
"
jline.ConsoleRunner clojure.main
不过,其实你还可以用
rlwrap这个GNU库来增强clojure REPL。使用它有如下好处:
1.Tab completion,使用tab做代码提示。
2.括号匹配
3.历史记录,哪怕你重启REPL
4.通过
.inputrc来绑定vi或者emacs
具体操作步骤如下:
1.首先,你需要在你的机器上安装rlwrap,你可以通过apt或者port,homebrew等工具安装或者自己下载安装:
sudo port install rlwrap
2.在你的home目录下创建一个clojure目录作为clojure home,并拷贝clojure.jar进去:
mkdir
~/
clojure cp .m2
/
repository
/
org
/
clojure
/
clojure
/
1.3
.
0
/
clojure
-
1.3
.
0
.jar
~/
clojure
/
clojure.jar
我是从maven的本地仓库里拷贝了clojure 1.3的jar包过去,重命名为clojure.jar
3.创建一个shell脚本名为clj,并放入你的path变量,脚本内容:
#
!/
bin
/
sh breakchars
=
"
(){}[],^%$#@\
"
\
"
;:''|\\
"
CLOJURE_DIR
=~/
clojure CLOJURE_JAR
=
"
$CLOJURE_DIR
"
/
clojure.jar JAVA_OPTS
=
"
-Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSClassUnloadingEnabled
"
if
[ $#
-
eq
0
]; then exec rlwrap
--
remember
-
c
-
b
"
$breakchars
"
\
-
f
"
$HOME
"
/
.clj_completions \
-
t
"
Clojure REPL
"
\
-
p red \
-
H
"
$CLOJURE_DIR
"
/
.repl_history
-
s
1000
\ java
"
$JAVA_OPTS
"
-
cp
"
$CLOJURE_JAR
"
clojure.main
else
exec java
-
cp
"
$CLOJURE_JAR
"
clojure.main $
1
"
$@
"
fi
我们将命令历史输出到~/clojure/.repl_history文件中,并限制数目为1000。
4.clj脚本中通过-f选项指定了completions文件为~/.clj_completions,执行下列clojure程序生成此文件:
(def completions (keys (ns
-
publics (find
-
ns 'clojure.core)))) ;(def completions (mapcat (comp keys ns
-
publics) (all
-
ns))) (
with
-
open [f (java.io.BufferedWriter. (java.io.FileWriter. (str (System
/
getenv
"
HOME
"
)
"
/.clj_completions
"
)))] (.write f (apply str (interpose \newline completions))))
这个程序只生成clojure.core的completions文件,如果你想将所有ns都加入进去,注释掉第一行,使用第二行程序。
5.最后,配置下~/.inputrc文件:
set editing
-
mode emacs tab: complete set completion
-
query
-
items
150
set completion
-
ignore
-
case
on set blink
-
matching
-
paren on set bell
-
style visible
我绑定为emacs,你可以选择vi。 6.一切搞定,接下来你可以敲入命令clj来使用rlwrap启动clojure REPL了,可以用tab做代码提示了,可以用Ctrl + r来搜索历史命令,运行截图:
文章转自庄周梦蝶 ,原文发布时间2012-02-14
相关资源:敏捷开发V1.0.pptx