如何让sbt正确处理键盘输入?解决回车需补按无效键问题
解决sbt中按下键无响应,需额外按无效键才执行的问题
我之前也碰到过这个糟心的问题——运行sbt时按回车键完全没反应,非得再随便按个“无效键”,sbt才会执行回车的操作,还把那个无效键直接忽略掉。折腾了好一阵后发现,这个问题和系统属性jline.terminal的配置密切相关。
问题根源
jline.terminal是控制sbt终端交互行为的系统属性,它的可选有效值包括:auto、unix、win、windows、none、off、false,还有其他一些相关的终端类型值。当这个属性的自动识别出现异常时,就会导致回车键的响应出现问题。
修复方案
你可以通过强制指定jline.terminal的属性值来解决这个问题,有两种常用方式:
临时生效:启动sbt时直接指定
在启动sbt的命令行里加上属性参数,比如Linux/macOS系统可以用:sbt -Djline.terminal=unixWindows系统则可以尝试:
sbt -Djline.terminal=windows永久生效:配置到sbt全局文件
如果你不想每次启动sbt都输入额外命令,可以把配置加到全局sbt文件里:- 找到用户目录下的
.sbt文件夹(Windows是C:\Users\<你的用户名>\.sbt,Linux/macOS是~/.sbt) - 进入
1.0文件夹(对应sbt 1.x版本,其他版本请对应调整),新建或编辑global.sbt文件 - 添加以下内容并保存:
sys.props("jline.terminal") = "unix" // Windows系统替换成"windows"
重启sbt后,回车键应该就能正常响应了。
- 找到用户目录下的
备选尝试
如果上面的终端类型值都没效果,还可以试试none或者off,这两个值会禁用jline的终端适配,也可能解决这个异常交互问题。
内容的提问来源于stack exchange,提问作者TheGeeko61
相关产品推荐
相关产品推荐

