在Scala控制台中使用颜色

18

我本以为那会很简单

Console.out.println( "Test " + Console.RED + " RED " + Console.RESET )

但是什么都没有发生,相反我看到控制字符(例如"\033[31m")。我尝试了从sbt中运行(sbt run)和正常的IDEA运行配置运行...


2
我不知道用Scala是可能的,为这种文化点赞。 - Christopher Chiche
请参考http://stackoverflow.com/questions/27229533/how-to-colorize-the-standard-output-in-scala-with-ansi-codes,了解Console.RED等的替代方案。 - Bruno Bieth
5个回答

13

如果您的控制台支持颜色,它就会工作。我刚刚通过putty在Linux系统上尝试并得到了预期的结果。

编辑:如果您想通过Windows执行此操作,您可以使用Ansicon在标准命令提示符中提供颜色。


1
啊,好的,看起来这是IntelliJ IDEA控制台的问题。虽然IDEA的sbt插件为sbt本身提供了颜色,但似乎scala.Console的ANSI控制码不受支持。我尝试从普通的bash运行,它可以工作。 - 0__

6

是的,上面的方法可以完美地工作。 此外,我发现将它们包装成字符串上的方法“.red”,就像在这个库中一样 https://github.com/ktoso/scala-rainbow

有很多Ruby宝石可以做到这一点,但Scala还没有那么多... :-)


4

来自Scala标准库:

import scala.io.AnsiColor._
println(s"${REVERSED}${BOLD}My name ist ${GREEN}Green!${RESET} default font")

在IntelliJ控制台中也可以运行


1
如果您正在使用Scala 2.11+,您可以使用此库:https://github.com/backuity/ansi-interpolator 它使用宏在编译时转换字符串,并支持嵌套:
ansi"Text containing ansi tags such as %bold{bold text} or %underline{can be %yellow{nested}}"

// you can also use string interpolation:
val someMsg = "hey"
ansi"My msg %bold{in bold: $someMsg}"

1
除了1)基本颜色,如果你还需要2)鲜艳的和3)背景颜色,我建议使用Jansi,它提供了这些选项。

build.sbt:

库依赖 +=“org.fusesource.jansi”%“jansi”%“1.17.1”


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