如何在cygwin中使用"lein repl"命令历史记录?

3
我正在Windows 7上使用Cygwin和最新的Lein,但是在repl中,按上下键会移动我到控制台而不是显示历史记录(这是我期望的)。我已经在Google搜索了一下,发现这与使用jline而不是readline有关(不知道这是什么意思),但我不知道如何利用这些信息来解决我的问题。
2个回答

5

我在这里找到了答案:

我修改了lein启动脚本,调用stty并设置jline.terminal,看起来可以工作:

stty -icanon min 1 -echo
$LEIN_JAVA_CMD \
    -client -XX:+TieredCompilation \
    -Djline.terminal=jline.UnixTerminal \
    $LEIN_JVM_OPTS \
    -Dfile.encoding=UTF-8 \
    -Dmaven.wagon.http.ssl.easy=false \
    -Dleiningen.original.pwd="$ORIGINAL_PWD" \
    -Dleiningen.trampoline-file="$TRAMPOLINE_FILE" \
    -cp "$CLASSPATH" \
    clojure.main -m leiningen.core.main "$@"
EXIT_CODE=$?
stty icanon echo

我修改了lein脚本中的那个部分,现在up = history。


4
你提供的一种替代方案是在Cygwin中安装rlwrap。这将为任何交互式命令行应用程序提供Readline功能(例如,命令历史记录搜索和导航)。如果你使用bash已经有一段时间了,你就会知道这些功能是什么。
你需要将应用程序作为参数启动readline包装器,但这可以使用适当的别名或函数隐藏起来:
rlwrap lein repl

使用rlwrap的好处在于它可以为除了repl特定情况之外的其他情况添加这些功能,与您的建议相比。

非常有趣。我想试一下并回报结果。即使不是关于Lein的问题,这也是值得了解的好东西。 - Daniel Kaplan
1
没错。在工作中,我们已经使用 sqlplus 很长时间了,以至于人们忘记了 sqlplus 并没有本地提供这个功能。 - Burhan Ali
1
我喜欢这个解决方案比我找到的更好,所以我将其标记为答案。谢谢。 - Daniel Kaplan
@tieTYT 很好。很高兴听到你觉得它有用。 - Burhan Ali
你知道吗,我注意到每次我从 lein repl 中使用 ctrl+c 退出时,都会留下一个 java.exe 进程。你有遇到同样的问题吗? - Daniel Kaplan
1
@tieTYT 我没有看到这种情况发生,但我可以看到其他人已经讨论过了(https://groups.google.com/d/msg/leiningen/pVgraIJhMaI/crejYJSJ2TAJ)。不过这个讨论是一年前的,不确定它是否相关。 - Burhan Ali

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