tail -f を実行してマシンに ssh で接続しているときにターミナル (OS X) をスクロールすると、奇妙な文字が表示される

tail -f を実行してマシンに ssh で接続しているときにターミナル (OS X) をスクロールすると、奇妙な文字が表示される

リモートマシンにssh接続して を実行していますtail -f。トラックパッドを使用して上下にスクロールするたびに、次のような奇妙な文字が表示されます。

OB^[OB^[OB^[OB^[OB^[OOB^[OB^[OB^[OB^[OB^[O

以前はこのようなことは起きませんでしたが、上にスクロールして以前のログを見ることもできません。なぜこのようなことが起きるのでしょうか。また、どうすればこれを無効にできるのでしょうか。

答え1

TL;DR: メニュー設定の [表示] -> [代替画面の表示/非表示] を確認してください。 「代替画面モード」になっている可能性があります。 または、スクロール時に SHIFT キーを使用して、他のスクロール動作を取得してみてください。

^[は、Control-左括弧 (エスケープ文字とも呼ばれます) の印刷可能な表現です。インフォメーション^[OBは、下矢印キーの xterm エスケープ シーケンス ( は上矢印シーケンス) であることがわかります^[OA。ターミナルは xterm をエミュレートし、マウスのスクロール操作を矢印キー シーケンスに変換します。

ターミナルでマウスを使用する方法についての過去の議論をいくつか見つけました。

しかし、それらはすべて OSX の以前のバージョンに関するものであり、ターミナルはこの領域で時間の経過とともに変化してきたようです。この記事Yosemite での動作について説明していますが、技術的な詳細が少し不足しています。残りの部分は、Yosemite でターミナルを操作して発見したことです。

ターミナルには、マウスのスクロール処理のための 2 つのモードがあります。

  1. 1 つのモードでは、スクロールするとターミナルがビューポートをスクロールするため、ターミナルのスクロールバック バッファ (画面の上部からスクロールして消えた行) を見ることができます。ターミナルをスクロールすると、OSX スクロールバーが表示されます。
  2. 他のモードでは、スクロールすると、ターミナルは上矢印と下矢印のシーケンスを送信します。ターミナルで実行されているプログラムは、おそらくそれらを処理できるでしょう。

スクロール中に SHIFT キーを押すと、モードを一時的に切り替えることができます。たとえば、ターミナルにコマンド プロンプトが表示されているときに scroll キーを押すとターミナル ウィンドウがスクロールし、Shift キーを押しながら scroll キーを押すと bash コマンド履歴がスクロールします。

ターミナルには、代替画面vimやのようなフルスクリーン プログラムはless、ターミナルを別の画面に切り替えて独自のコンテンツを表示できます。このようなプログラムを終了すると、ターミナルはメイン画面に戻ります。これについて言及するのは、ターミナルのスクロール動作が別の画面で変わる可能性があるためです。

通常、1 番目のスクロール動作がメインの動作であり、2 番目の動作を取得するには SHIFT キーを押す必要があります。ただし、ターミナル -> 設定 -> プロファイル -> キーボードに移動します。下部に「代替画面をスクロール」というチェックボックスがあります。このボックスにチェックを入れると、代替画面でのスクロール動作が逆になります。チェックを入れると、2 番目のスクロール動作が代替画面のデフォルトになり、1 番目の動作を取得するには SHIFT キーを押す必要があります。

たとえば、コマンドラインからマウスをスクロールすると、ターミナルのスクロールバック バッファが表示されます。しかし、vimファイルの編集を開始すると、別の画面に切り替わり、突然マウスをスクロールするとカーソルが移動します。これは、vim 内で必要なことです。

問題の原因についてですが、端末が代替画面を表示しているようです。切り替えるメニュー オプションがあります ([表示] -> [代替画面の表示/非表示])。または、実行している何かが端末を代替画面モードにしています。screenまたはtmuxなどを使用している可能性がありますか? 回避策として、SHIFT キーを使用して必要なスクロール動作を取得してみてください。または、そのチェックボックスをオフにすることもできます。

答え2

端末エミュレーションを xterm-256color から vt100 に変更しました。これは、[設定] => [プロファイル] => [詳細] の [端末を次のように宣言する] ドロップダウンで行いました。

関連情報