我真的希望sbt和它的控制台能够在你认为可以完成的任何方式下在cygwin下工作吗?

mbr*_*ley 11 cygwin scala sbt

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

[错误]无法构建终端; 回到unsupportedjava.lang.IllegalArgumentException:无效的终端类型:jline.UnixTerminal

你也不能使用退格键

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

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

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

谢谢

hay*_*ikh 18

以下适用于我(大多数情况下,见底部注释):

  1. 使用薄荷壳.我相信这是新的cygwin安装的默认shell,但已经作为替代品包含了一段时间.如果您的<cygwin home>\bin文件夹中存在mintty.exe ,则可以使用它,否则可以通过setup.exe中的典型cygwin软件包选项进行安装.
  2. 打开一个薄荷窗口,右键单击任意位置,转到Options...- > Keys,并确保Send Backspace as ^H选中.这将允许REPL正确解释退格.

只是运行Scala REPL应该是您所需要的,但尝试运行sbt console仍然可以产生该异常.为了解决这个问题,请在sbt没有任何参数的情况下运行以进入sbt提示符.从那里执行:

eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")
Run Code Online (Sandbox Code Playgroud)

然后

console
Run Code Online (Sandbox Code Playgroud)

或者,作为单个命令(两个分号都很重要):

; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal") ; console
Run Code Online (Sandbox Code Playgroud)


据我所知,这至少部分是由Scala REPL和使用不兼容版本的JLine的sbt提示引起的.特别是,看起来Scala REPL在库周围创建了自己的包装器,并且在sbt直接使用JLine库时正在使用它.

注意

我继续遇到的一个限制是,即使shell窗口有更多的水平空间,REPL也会包含在第80列.不仅如此,但是当REPL像这样包裹时它会覆盖相同的行而不是前进到下一行,并且从历史中拉出长行最终会将光标推到您实际编辑的行上方.