デフォルトでは、sbt の対話モードは、コマンドラインでコマンドが指定されていない場合、または `shell` コマンドが呼び出された場合に開始されます。
名前が示すように、タブ補完は Tab キーを押すことで呼び出されます。現在のカーソル位置の左に入力されたテキストを補完できる候補が表示されます。候補の中で明確な部分は自動的に現在のテキストに追加されます。コマンドは通常、構文のほとんどでタブ補完をサポートしています。
例として、`tes` と入力して Tab キーを押すと
> tes<TAB>
sbt は `t` を追加します
> test
さらに補完を得るには、もう一度 Tab キーを押します
> test<TAB>
testFrameworks testListeners testLoader testOnly testOptions test:
今度は、次の文字に複数の可能性があるため、sbt は利用可能なオプションを出力します。 `testOnly` を選択し、残りのコマンドを入力して Tab キーを 2 回押すことで、さらに候補を得ます
> testOnly<TAB><TAB>
-- sbt.DagSpecification sbt.EmptyRelationTest sbt.KeyTest sbt.RelationTest sbt.SettingsTest
最初の Tab は明確なスペースを挿入し、2 番目は実行するテストの名前を提案します。 `--` の候補は、テスト名とテストフレームワークに提供されるオプションの区切り文字です。他の候補は、sbt のモジュールのいずれかのテストクラスの名前です。テスト名の候補は、最初にテストをコンパイルする必要があります。最後のテストコンパイル以降にテストが追加、名前変更、または削除された場合、補完は別のコンパイルが成功するまで古くなります。
コマンドによっては、補完のレベルが異なります。 Tab キーを複数回押すと、補完の詳細度が上がります。(現在、この機能は `set` コマンドによってのみ使用されています。)
Scala と sbt の両方で使用される JLine は、多くのキーバインディングの設定ファイルを使用します。このファイルの場所は、システムプロパティ `jline.keybindings` で変更できます。デフォルトのキーバインディングファイルは sbt ランチャーに含まれており、カスタマイズの開始点として使用できます。
デフォルトでは、sbt はコマンドのプロンプトとして `>` のみを表示します。これは、型 `State => String` を持つ `shellPrompt` 設定で変更できます。 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 シェル履歴 を参照してください。
デフォルトでは、対話履歴は現在のプロジェクトの `target/` ディレクトリに保存されます (ただし、`clean` では削除されません)。したがって、履歴はサブプロジェクトごとに異なります。場所は、`Option[File]` 型の `historyPath` 設定で変更できます。たとえば、履歴を出力ディレクトリではなくプロジェクトのルートディレクトリに保存できます
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