預設情況下,當命令列上未提供任何指令或調用 shell
指令時,將啟動 sbt 的互動模式。
顧名思義,tab 完成是透過按下 tab 鍵來調用。系統會提供建議,以完成在目前游標位置左側輸入的文字。任何明確的建議部分都會自動附加到目前的文字。指令通常支援其大部分語法的 tab 完成。
例如,輸入 tes
並按下 tab
> tes<TAB>
會導致 sbt 附加 t
> test
若要取得更多完成項目,請再次按下 tab
> test<TAB>
testFrameworks testListeners testLoader testOnly testOptions test:
現在,下一個字元有多個可能性,因此 sbt 會印出可用的選項。我們將選擇 testOnly
,並在輸入指令的其餘部分並按下 tab 鍵兩次後取得更多建議
> testOnly<TAB><TAB>
-- sbt.DagSpecification sbt.EmptyRelationTest sbt.KeyTest sbt.RelationTest sbt.SettingsTest
第一個 tab 會插入一個明確的空格,第二個 tab 會建議要執行的測試名稱。建議的 --
是用於分隔測試名稱和提供給測試框架的選項。其他建議是 sbt 其中一個模組的測試類別名稱。測試名稱建議需要先編譯測試。如果在上次測試編譯後新增、重新命名或移除測試,則完成項目將會過期,直到另一次成功編譯為止。
某些指令具有不同的完成層級。多次按下 tab 鍵會增加完成項目的詳細程度。(目前,此功能僅由 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 將使用目前專案(由 project
指令選取)的 historyPath
值。
上一節說明如何組態歷程記錄檔案的位置。此設定可用於在建置中的所有專案之間共用互動歷程記錄,而不是每個專案都使用不同的歷程記錄。執行此操作的方式是將 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