以下对我有用(主要见底部注释):
- 使用薄荷壳。我相信这是新 cygwin 安装的默认 shell,但作为替代方案已经包含了一段时间。如果您的文件夹中存在 mintty.exe,
<cygwin home>\bin
那么它就可以使用了,否则可以通过 setup.exe 中的典型 cygwin 包选择来安装它。
- 打开一个 mintty 窗口,右键单击任意位置,转到
Options...
-> Keys
,并确保Send Backspace as ^H
已选中。这将允许 REPL 正确解释退格。
仅仅运行 Scala REPL 应该是你所需要的,但尝试运行sbt console
仍然会产生该异常。为了解决这个问题,sbt
不带任何参数运行以进入 sbt 提示符。从那里执行:
eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")
然后
console
或者,作为单个命令(两个分号都很重要):
; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal") ; console
据我所知,这至少部分是由 Scala REPL 和使用不兼容版本的 JLine 的 sbt 提示引起的。特别是,看起来 Scala REPL 围绕库创建了自己的包装器,并且正在使用它,而 sbt 直接使用 JLine 库。
笔记
我继续遇到的一个限制是,即使 shell 窗口有更多的水平空间,REPL 也会在第 80 列处换行。不仅如此,当 REPL 像这样换行时,它会覆盖同一行而不是前进到下一行,并且从历史记录中拉出长行最终会将光标推到您实际编辑的行上方。