5

我正在使用 rlwrap,但我没有制表符补全功能,并且带有重音符号的字符会被破坏。这是在 Terminal.app 中的 OSX 10.6 上。

4

2 回答 2

3

ClojureX试图成为您想要的 OS X 用户。我自己没有这方面的经验(我是 Linux 用户),但我的印象是,如果您遇到奇怪的问题(字符修饰?我不明白,ClojureX 人员会愿意帮助您)那个,有或没有 rlwrap...)。

更新:这里是Clojure 小组公告的链接:关于ClojureX 的一些最新变化...

在基于 JVM 的控制台应用程序中还有第二个类似 readline 功能的选项—— jline。使用类似的东西

java -cp $CLASSPATH jline.ConsoleRunner clojure.main

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

另外,我认为我从未听说过独立 Clojure REPL 中的制表符补全。大多数人使用 Emacs / Aquamacs + SLIME、Vimclojure 或一些带有 Clojure 插件的 Java IDE 来处理类似的事情。好吧,其他一些人已经听说过(请参阅布赖恩的回答)。从那以后,我发现了如何使用 jline 设置选项卡完成的描述而且我已经检查了 ClojureX 的源代码——它确实为你设置了 tab 补全。这使得我原来的答案的这一部分有点错误,我猜......但事实仍然是 ClojureX 是一个非常安全的选择,可以省去你自己配置东西的麻烦。

于 2010-02-23T19:11:52.980 回答
2

使用-frlwrap 标志来启用制表符补全。不过,这将是静态完成,基于您指定的某个文件中的静态符号列表。如果你想要动态完成(基于当前在你运行的 REPL 中定义的任何符号),你应该尝试 Emacs + SLIME 或等效的。

在任何情况下,这是生成符号列表以完成制表符的一种方法。您将不得不不时地重新生成此文件,因为在每个版本的 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
于 2010-02-24T00:47:53.150 回答