运行独立的clojure REPL的推荐方法是什么?

时间:2010-02-23 19:04:49

标签: clojure read-eval-print-loop

我正在使用rlwrap,但我没有tab-completion,带有重音的字符会被破坏。这是在Terminal.app。的OSX 10.6上。

2 个答案:

答案 0 :(得分:3)

ClojureX尝试成为您想要的OS X用户。我自己没有经验(我是一名Linux用户),但我的印象是,如果遇到奇怪的问题,ClojureX的人会愿意帮助你(角色破坏?我不明白无论是否有rlwrap ......)。

更新:这是指向an announcement on the Clojure group的链接:ClojureX最近的一些变化...

基于JVM的控制台应用程序中有类似readline的功能的第二个选项 - jline。使用像

这样的东西
java -cp $CLASSPATH jline.ConsoleRunner clojure.main

(当然,jline.jar包含在$CLASSPATH中)如果你想尝试一下。

另外,我认为我从未听说过独立的Clojure REPL中的标签完成。大多数人使用Emacs / Aquamacs + SLIME,Vimclojure或一些带有Clojure插件的Java IDE来做类似的事情。好吧,其他一些人听说过它(见Brian的回答)。之后我发现this description如何使用jline设置制表符。 我已经检查了ClojureX的来源 - 它确实为你设置了标签。这让我原来回答的这一部分有点失误,我猜......但事实仍然是ClojureX是一个非常安全的赌注,可以省去自己配置事情的麻烦。

答案 1 :(得分:2)

使用-f标志来rlwrap以启用标签完成。但是,它将基于您指定的某个文件中的静态符号列表进行静态完成。如果您想要动态完成(基于当前在运行的REPL中定义的任何符号),您应该尝试使用Emacs + SLIME或等效的。

无论如何,这是生成tab-complete符号列表的一种方法。您将不得不不时重新生成此文件,因为在每个版本中都会向Clojure的核心添加新符号。 (此代码适用于前沿clojure-contrib; clojure.contrib.io在早期版本中称为duck-streams。)

user> (use 'clojure.contrib.io)
nil
user> (with-out-writer "/home/user/.clj-tabcompletion"
        (doseq [[sym _] (ns-publics 'clojure.core)]
          (println sym)))
nil

然后:

$ rlwrap -f ~/.clj-tabcompletion java -jar clojure.jar
Clojure 1.2.0-master-SNAPSHOT
user=> def<TAB>
definline    defmacro     defmethod    defmulti     defn         defonce      defprotocol  defstruct    deftype
user=> def

如果您的终端使用重音修改字符,则可能存在编码或语言环境问题。这对我来说可以。我不使用OS X而且不知道你使用的终端,所以我无法帮助。在Linux中的Konsole中,在rlwrap中:

user=> (println "àèìòùáéíóúäëïöüâêîôûãõñ")
àèìòùáéíóúäëïöüâêîôûãõñ
nil
user=> (println "牛が牧場で草を食べている。")
牛が牧場で草を食べている。
nil