如何禁用sbt/play的彩色终端输出?

58

我想禁用从sbt/play记录的颜色转义代码。这可能吗?如果可能的话,是否有一种方法可以在不更改配置的情况下完成 - 例如通过命令行开关或系统属性。


现在考虑接受Steven Shaw的答案? - samthebest
5个回答

64

自从版本0.13.8(可能更早)起,现在您可以简单地使用sbt的-no-colors选项。例如:

sbt -no-colors test

3
如果你正在使用更新版本的sbt,那么这个答案比被接受的答案更好。 - ishaaq
但是这两个命令的存在有什么意义呢?在我的sbt设置中,dependencies甚至不是一个有效的sbt命令。 - matanster
我编辑了答案,使用test代替了dependencies,并明确了有关sbt版本的隐含点。这应该解决了@matanster提出的问题。 - samthebest
1
我在运行sbt 0.13.13时遇到了一个错误:“不是有效的命令:no-colors”。 - asgs

56

您可以简单地将系统属性sbt.log.noformat设置为true。如果您想在 Vim 中使用 SBT,您可以创建以下脚本:

#!/bin/bash
java -Dsbt.log.noformat=true $JAVA_OPTS -jar "${HOME}/bin/sbt-launch.jar" "$@"

25
这也可以作为对sbt本身的参数:sbt -Dsbt.log.noformat=true,如果你使用sbt "the rebel cut",你可以使用参数-no-colors - tobym
@jilen - 你有一个示例可以玩吗?我似乎无法弄清楚如何做到这一点:https://dev59.com/KX7aa4cB1Zd3GeqPlAuS - cdeszaq

2

这似乎是您的平台与实际的jline.terminal属性不匹配。我猜测,当我像Daniel建议的那样在Windows命令行中传递参数时,我也会看到颜色转义代码。

因此,您必须确保属性与您的平台相匹配,即在Windows上为WindowsTerminal,在Unix上为UnixTerminal。

如果这并没有帮助您,那么您可能正在使用不受支持的平台,此时网站建议使用:

-Djline.terminal=jline.UnsupportedTerminal

2
抱歉需要澄清一下,不是说着色功能无法使用,而是我想要能够禁用它。@Moritz的回答帮了我很多。 - Mark Hibberd

0

嗯,在Windows上,您可以通过安装Cygwin并传递此参数来获取颜色:

-Djline.terminal=jline.UnixTerminal

所以我会查找 jline 参数,看看哪些禁用颜色编码。


你是在使用rxvt或mintty吗?在默认的cygwin控制台中,我使用cmd.exe得到了这样的输出:←[0m[←[0minfo←[0m] ←[0mBuilding project... - huynhjl
@huynhjl 不,我从未尝试让那个提示生效。尽管如此,我对输出有些惊讶。TERM的值是多少? - Daniel C. Sobral
TERM被设置为cygwin。我目前对cygwin最烦人的问题是多行编辑不起作用(一旦换行,就无法通过正确的视觉反馈返回并编辑上一行)。我已经发现jline无法在cygwin下处理win32上的ansi代码。因此,我很想看看sbt如何处理颜色。 - huynhjl

0

我通过在Cygwin中添加以下内容,成功实现了从SBT获得彩色输出:

-Djline.terminal=jline.UnixTerminal

此外,我发现我还需要将以下行添加到Cygwin.bat文件中:
set CYGWIN=tty ntsec

添加后,SBT会给出非常好的彩色输出。此外,我建议看一下Console2,因为它可以通过Cygwin钩取,但在我看来提供了更好的界面:

http://sourceforge.net/projects/console/


我已经尝试了console2和cmd,但出现了一些问题:制表符自动补全不起作用,退格键不起作用,在启动控制台时会出现异常“Invalid terminal type: jline.UnixTerminal”。 - OlegYch

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