Clojure标准REPL带有缓冲区编辑器吗?

6
我不是在寻找IDE或集成REPL。我只想问一下是否有人知道是否可以在REPL中像“psql”或某些*nix shell中那样拥有缓冲区编辑器。例如,在psql中,您只需输入“\e”,即可在编辑器中获取上一个命令,并在退出时执行它。这对于Clojure REPL将是很棒的功能。
$ java -cp jline.jar:clojure-1.3.0.jar jline.ConsoleRunner clojure.main

那么,是否有这样的功能?它应该在哪里实现,在jline中吗?

解决方法:

使用rlwrap工具。

我需要编译readline ftp://ftp.gnu.org/gnu/readline/和rlwrap http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap

之后,我可以使用以下快捷方式启动编辑器。

Ctrl + ^

rlwrap -m -- java -cp clojure-1.3.0.jar clojure.main

对于在Mac OSX上使用leiningen,我需要更改以下内容:

lein 1.6.2
*** 226,233 ****
              rlwrap -m -q '"' echo "hi" > /dev/null 2>&1
              if [ $? -eq 0 ]; then
                  RLWRAP="$RLWRAP -r -m -q '\"'"
-             else
-                 RLWRAP="$RLWRAP -m --"
              fi
          fi
      fi
--- 226,231 ----

并且导出RLWRAP_EDITOR

export RLWRAP_EDITOR="vim +%L"

2个回答

8

rlwrap

有很多方法可以实现你想要的功能,但是rlwrap二进制文件可以满足你的需求。我在Mac OS X上以前也曾遇到jline版本问题,所以停止使用它。

当我在终端中输入'clj'时,实际上是通过以下bash脚本在/usr/local/bin/clj中执行被rlwrap包装的REPL:

#!/bin/sh
# Runs clojure.
# With no arguments, runs Clojure's REPL.

CLOJURE=$CLASSPATH:/usr/local/clojure/1.3.0/clojure-1.3.0.jar

rlwrap java -cp $CLOJURE clojure.main "$@"

把脚本放在任何路径下即可使用。
最后,您不需要该脚本,我只是为了方便而提供。如果您的系统上有rlwrap并且clj在您的路径中,则可以直接键入:
rlwrap clj
更多阅读请参考Clojure wiki book:使用rlwrap增强Clojure REPL

6

谢谢你的提示,使用leiningen获取该功能将是我的第二步。本以为没有它会更简单些。 但据我所知,如果存在rlwrap,leiningen会自动使用它。 - Benjamin Peter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接