1. 交互模式

交互模式 

使用制表符补全 

默认情况下,当命令行上没有提供命令或调用 shell 命令时,将启动 sbt 的交互模式。

顾名思义,制表符补全通过按下制表键调用。将提供建议,这些建议可以完成在当前光标位置左侧输入的文本。任何明确的建议部分都会自动附加到当前文本。命令通常支持对其大部分语法进行制表符补全。

例如,输入 tes 并按下制表键

> tes<TAB>

结果是 sbt 追加了一个 t

> test

要获取更多补全,请再次按下制表键

> test<TAB>
testFrameworks   testListeners    testLoader       testOnly         testOptions      test:

现在,下一个字符有多种可能性,因此 sbt 会打印出可用的选项。我们将选择 testOnly 并通过输入命令的其余部分并两次按下制表键来获取更多建议

> testOnly<TAB><TAB>
--                      sbt.DagSpecification    sbt.EmptyRelationTest   sbt.KeyTest             sbt.RelationTest        sbt.SettingsTest

第一个制表键插入一个明确的空格,第二个建议要运行的测试的名称。-- 的建议用于测试名称和提供给测试框架的选项之间的分隔符。其他建议是 sbt 的一个模块的测试类的名称。测试名称建议需要先编译测试。如果自上次测试编译以来添加、重命名或删除了测试,则补全将过时,直到另一次成功编译。

显示更多制表符补全建议 

某些命令具有不同的补全级别。多次按下制表键会增加补全的详细程度。(目前,此功能仅由 set 命令使用。)

修改默认 JLine 键绑定 

Scala 和 sbt 都使用的 JLine 使用配置文件来处理其许多键绑定。可以使用系统属性 jline.keybindings 更改此文件的位置。默认键绑定文件包含在 sbt 启动器中,可以用作自定义的起点。

配置提示字符串 

默认情况下,sbt 仅显示 > 来提示输入命令。这可以通过 shellPrompt 设置更改,该设置的类型为 State => StringState 包含 sbt 的所有状态,因此可以访问用于提示字符串的所有构建信息。

示例

// set the prompt (for this build) to include the project id.
ThisBuild / shellPrompt := { state => Project.extract(state).currentRef.project + "> " }

// set the prompt (for the current project) to include the username
shellPrompt := { state => System.getProperty("user.name") + "> " }

使用历史记录 

请参阅 sbt shell 历史记录

更改交互式历史记录文件的位置 

默认情况下,交互式历史记录存储在当前项目的 target/ 目录中(但不会被 clean 删除)。因此,每个子项目的历史记录都是独立的。可以使用 historyPath 设置更改位置,该设置的类型为 Option[File]。例如,可以将历史记录存储在项目的根目录中,而不是输出目录中

historyPath := Some(baseDirectory.value / ".history")

需要为每个项目设置历史记录路径,因为 sbt 将使用当前项目的 historyPath 值(由 project 命令选择)。

对所有项目使用相同的历史记录 

上一节介绍了如何配置历史记录文件的位置。此设置可用于在构建中的所有项目之间共享交互式历史记录,而不是为每个项目使用不同的历史记录。实现此目标的方法是将 historyPath 设置为同一个文件,例如构建根项目的 target/ 目录中的文件

historyPath :=
  Some( (target in LocalRootProject).value / ".history")

in LocalRootProject 部分表示获取构建的根项目的输出目录。

禁用交互式历史记录 

如果由于任何原因要禁用历史记录,请在要禁用的每个项目中将 historyPath 设置为 None

> historyPath := None

在进入交互模式之前运行命令 

交互模式由 shell 命令实现。默认情况下,如果命令行上没有提供命令给 sbt,则会运行 shell 命令。要在进入交互模式之前运行命令,请在命令行上指定它们,然后是 shell。例如,

$ sbt clean compile shell

这将在进入交互式提示符之前运行 cleancompile。如果 cleancompile 失败,sbt 将退出而不会进入提示符。要无论这些初始命令是否成功都进入提示符,请在前面添加 "onFailure shell",这意味着如果任何命令失败,则运行 shell。例如,

$ sbt "onFailure shell" clean compile shell