Clojure世界:使用rlwrap增强REPL

简介:
   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来搜索历史命令,运行截图:



文章转自庄周梦蝶  ,原文发布时间2012-02-14


目录
相关文章
|
6月前
|
关系型数据库 MySQL
mysql监测工具tuning-primer.sh
mysql监测工具tuning-primer.sh
33 0
|
12月前
|
安全 C++ Python
[✔️] python使用小节
[✔️] python使用小节
61 0
|
12月前
|
存储 vr&ar 图形学
[✔️]lua性能分析工具原理简介
[✔️]lua性能分析工具原理简介
414 0
|
12月前
|
C++
[✔️]unreal插件lua-profiler:分析lua性能
[✔️]unreal插件lua-profiler:分析lua性能
230 0
|
12月前
|
存储
[✔️] lua profile细节逻辑
[✔️] lua profile细节逻辑
68 0
|
12月前
|
编译器 Linux Android开发
[✔️]luajit编译
[✔️]luajit编译
117 0
|
缓存 关系型数据库 MySQL
MySQL 脚本优化工具tuning-primer.sh使用教程说明
今天推荐给大家一个不错的脚本tuning-primer.sh,可以帮助我们去查看一下msyql的运行情况,产生报告和给出一些建议,我们可以根据这些建议,结合mysql服务器的实际情况,对mysql进行优化。
1351 0