IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Clojure世界:使用rlwrap增强REPL

BlogJava-庄周梦蝶 2012-03-04 17:50:59 累计浏览 2,706 次
本机暂存

    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. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. 找回linux丢失的磁盘空间 (累计阅读 8,542)
  2. 如何查看Linux 硬件配置信息 (累计阅读 7,266)
  3. Vim 中截取部分内容保存到其他文件 (累计阅读 7,194)
  4. Storm源码浅析之topology的提交 (累计阅读 5,939)
  5. 神探tcpdump第二招 (累计阅读 5,875)
  6. VIM查找替换归纳总结 (累计阅读 5,389)
  7. 网络流量监控软件vnStat (累计阅读 4,959)
  8. VIM常用指令 (累计阅读 3,899)
  9. 软件推荐:curl (累计阅读 3,718)
  10. mac下的tree命令 (累计阅读 3,471)