【问题标题】:How to make SBT not truncate its output?如何使 SBT 不截断其输出?
【发布时间】:2017-10-19 20:46:59
【问题描述】:

以命令sbt "inspect tree clean"为例。

这会将其输出(使用..)截断为终端的宽度,如果重定向到文件,则截断为 40 个字符。

C:\dev>sbt "inspect tree clean"
[info] Loading project definition from C:\dev\project
[info] Set current project to dev (in build file:/C:/dev/)
[info] *:clean = Task[Unit]
[info]   +-*:clean::streams = Task[sb..
[info]   | +-*/*:streamsManager = Tas..

如何让它打印出整行而不被截断?我在 scala-sbt.org 上搜索了文档,但找不到任何相关内容。

我在 Windows 上使用 sbt 0.13.8。

【问题讨论】:

  • 我相信是 inspect tree 截断了它的输出,而不是 sbt。但是,它对解决问题没有多大帮助。

标签: scala sbt


【解决方案1】:

显然,你不能。以下是 SBT 中的相关代码:https://github.com/sbt/sbt/blob/0.13/main/src/main/scala/sbt/SettingGraph.scala#L58

相关部分是:

val defaultWidth = 40
val maxColumn = math.max(JLine.usingTerminal(_.getWidth), defaultWidth) - 8

因此,在交互模式下,您会得到终端的宽度 - 8,在标准输出中,您会得到 32 个字符。我没有看到它可以配置的任何地方,所以你最好的办法是在一个非常宽的终端窗口中运行它。 :)

编辑: 正如我在评论中所写,我已经提交了 SBT 的 PR,通过设置使该值可配置。现在,1年多的等待,这个设置终于成为SBT 1.0的一部分。要增加输出宽度,您可以在 build.sbt 中添加以下行:

asciiGraphWidth := <some big enough number>

或直接在 SBT 控制台执行此命令:

set asciiGraphWidth := <some big enough number>

【讨论】:

  • 这很烦人。我有两个宽屏显示器,但有些行仍然足够长,可以截断。
  • 可能会在 Github 上为他们创建问题?我绝对看到了这个长度可配置的好处,尤其是在非交互模式下。
  • @OrangeDog FWIW,我已经向他们发送了一个拉取请求,该请求可以配置最大宽度:github.com/sbt/sbt/pull/2633。它在那里挂了几天,没有太大进展。如果您想要更快,请考虑在 PR 上发表评论/投票。
  • 拉取请求已被接受,并且对于 SBT 1.0.0 应该是可见的。虽然 SBT 1.0.0.-M4 已经发布了一段时间,但 final 的发布日期还没有确定,可能要等一段时间。
  • 即将推出的 sbt 将为此提供新设置,请参阅 github.com/sbt/sbt/pull/2633/commits/…
【解决方案2】:

在 sbt 1.0.0 或更新版本中你可以运行:

sbt 'set asciiGraphWidth := 10000' 'inspect tree clean'

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多