技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> Clojure世界:使用rlwrap增强REPL

Clojure世界:使用rlwrap增强REPL

浏览:1563次  出处信息

    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 --"$breakchars"
 \
   
-"$HOME"/
.clj_completions \
   
-"Clojure REPL"
 \
   
-
p red \
   
-"$CLOJURE_DIR"/.repl_history -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来搜索历史命令,运行截图:


参考:http://en.wikibooks.org/wiki/Clojure_Programming/Getting_Started#Enhancing_Clojure_REPL_with_rlwrap

建议继续学习:

  1. Clojure世界:XML处理    (阅读:1976)
  2. Clojure世界:Http Client    (阅读:1970)
  3. Clojure世界:文件IO    (阅读:1857)
  4. Clojure世界:如何做性能测试    (阅读:1740)
  5. Clojure世界:静态代码分析    (阅读:1625)
  6. Clojure世界:API文档生成    (阅读:1639)
  7. Clojure世界:单元测试    (阅读:1459)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1