1. 互動模式

互動模式 

使用 tab 完成 

預設情況下,當命令列上未提供任何指令或調用 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 完成建議 

某些指令具有不同的完成層級。多次按下 tab 鍵會增加完成項目的詳細程度。(目前,此功能僅由 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 將使用目前專案(由 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。如果 cleancompile 失敗,sbt 將會退出,而不會進入提示符號。若要無論這些初始指令是否成功都進入提示符號,請在前面加上 "onFailure shell",這表示如果任何指令失敗,則執行 shell。例如,

$ sbt "onFailure shell" clean compile shell