默认情况下,当命令行上没有提供命令或调用 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
命令使用。)
Scala 和 sbt 都使用的 JLine 使用配置文件来处理其许多键绑定。可以使用系统属性 jline.keybindings
更改此文件的位置。默认键绑定文件包含在 sbt 启动器中,可以用作自定义的起点。
默认情况下,sbt 仅显示 >
来提示输入命令。这可以通过 shellPrompt
设置更改,该设置的类型为 State => String
。 State 包含 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
这将在进入交互式提示符之前运行 clean
和 compile
。如果 clean
或 compile
失败,sbt 将退出而不会进入提示符。要无论这些初始命令是否成功都进入提示符,请在前面添加 "onFailure shell"
,这意味着如果任何命令失败,则运行 shell
。例如,
$ sbt "onFailure shell" clean compile shell