代码之家  ›  专栏  ›  技术社区  ›  Michiel de Mare

运行独立clojure repl的建议方法是什么?

  •  5
  • Michiel de Mare  · 技术社区  · 15 年前

    我使用的是rlwrap,但没有制表符完成,带有重音的字符会被破坏。这在OSX 10.6的terminal.app中。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Brian Carper    15 年前

    使用 -f 标记为rlwrap以启用制表符完成。不过,它将是静态完成的,基于您指定的某个文件中的静态符号列表。如果您想要动态完成(基于当前在运行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
    

    如果您的终端使用重音符号破坏字符,则可能存在编码或区域设置问题。对我来说很好。我不使用OSX,也不知道你用的是什么终端,所以我帮不了你。在Linux中的konsole中,在rlwrap中:

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

    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 repls中的制表符完成。大多数人使用Emacs/AQUAMACS+粘泥,Vimclojure或一些Java IDE,用Culjule插件进行类似的操作。 好吧,其他人也听说过(见布莱恩的回答)。后来我发现 this description 如何使用jline设置选项卡完成。 我已经检查了Clojurex的来源——它确实为您设置了标签完成。我想,这让我最初的回答有点错误…但事实仍然是,Clojurex是一个非常安全的赌注,它可以省去你自己配置东西的麻烦。