我正在使用rlwrap,但我没有tab-completion,带有重音的字符会被破坏。这是在Terminal.app。的OSX 10.6上。
答案 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