11

基本的にコンソールを取得しようとすると、この問題(https://github.com/sbt/sbt/issues/562 )があります:

[エラー] ターミナルの構築に失敗しました。unsupportedjava.lang.IllegalArgumentException にフォールバックする: 無効な端末タイプ: jline.UnixTerminal

バックスペースも使えない

基本的に sbt を cygwin で使用することはできません (dos では問題ありませんが、cygwin の方がはるかに優れた環境です)。

ネットで見つけたいくつかの回避策を試しましたが、それらはすべて古いリリース用であり、現在は使用できません

回避策を知っているかどうか疑問に思っていましたか?

ありがとう

4

1 に答える 1

18

以下は私にとってはうまくいきます(ほとんどの場合、下部のメモを参照してください):

  1. ミントシェルを使用。これは、新しい cygwin インストールのデフォルトのシェルだと思いますが、しばらくの間、代替として含まれていました。mintty.exe が<cygwin home>\binフォルダーに存在する場合は、すぐに使用できます。存在しない場合は、setup.exe から通常の cygwin パッケージを選択してインストールできます。
  2. mintty ウィンドウを開き、任意の場所を右クリックして、Options...->Keysに移動し、チェックされていることSend Backspace as ^Hを確認します。これにより、REPL がバックスペースを正しく解釈できるようになります。

必要なのはScala REPLを実行するだけですが、実行しようとsbt consoleすると例外が発生する可能性があります。sbtそれを乗り越えるには、引数なしで実行して sbt プロンプトを表示します。そこから実行します:

eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")

それから

console

または、単一のコマンドとして (両方のセミコロンが重要です):

; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal") ; console


私が知る限り、これは少なくとも部分的には Scala REPL と、互換性のないバージョンの JLine を使用する sbt プロンプトが原因です。特に、Scala REPL はライブラリの周りに独自のラッパーを作成し、sbt が JLine ライブラリを直接使用している間にそれを使用しているようです。

ノート

私が遭遇し続けている制限の 1 つは、シェル ウィンドウの水平方向のスペースがより広い場合でも、REPL が列 80 で折り返されることです。それだけでなく、REPL がこのようにラップすると、次の行に進むのではなく同じ行を上書きし、履歴から長い行を取得すると、実際に編集している行の上にカーソルが押し出されます。

于 2013-07-31T07:42:01.447 に答える