11

我有这个问题(https://github.com/sbt/sbt/issues/562),基本上当我尝试获取控制台时它说:

[错误] 构建终端失败;回退到不支持的java.lang.IllegalArgumentException:无效的终端类型:jline.UnixTerminal

你也不能使用退格键

你基本上不能在 cygwin 中使用 sbt (在 dos 中很好,但 cygwin 是一个更好的环境)并在那里表达了我的担忧

我已经尝试了几种我在网上找到的解决方法,但它们都是旧版本的,现在没有用了

只是想知道您是否知道任何解决方法?

谢谢

4

1 回答 1

18

以下对我有用(主要见底部注释):

  1. 使用薄荷壳。我相信这是新 cygwin 安装的默认 shell,但作为替代方案已经包含了一段时间。如果您的文件夹中存在 mintty.exe,<cygwin home>\bin那么它就可以使用了,否则可以通过 setup.exe 中的典型 cygwin 包选择来安装它。
  2. 打开一个 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 像这样换行时,它会覆盖同一行而不是前进到下一行,并且从历史记录中拉出长行最终会将光标推到您实际编辑的行上方。

于 2013-07-31T07:42:01.447 回答