web-dev-qa-db-ja.com

ターミナル画面がめちゃくちゃになるという問題を解決するにはどうすればよいですか? (通常はサイズ変更後)

時々、端末画面がめちゃくちゃになり、man lsでマンページを読むか、上矢印キーを押して履歴内の前のコマンドに移動すると、画面に適切な場所ではない文字が表示されます。 (たとえば、画面の終わりを画面の中央にあるものとして扱います)。

コマンドresetが試行され、機能しません。機能する1つの方法は、ログアウトするかウィンドウを閉じ、最初にウィンドウのサイズを変更してからsshを実行する(またはそのタブを閉じてウィンドウのサイズを変更し、新しいタブを開いて新しいシェルを取得する)です)。

しかし、この方法では、仮想マシンコンソールの起動など、以前に行った操作がすべて失われます。シェルを閉じない場合、この問題を修正する方法はありますか?

(これはFedoraの内部で、Macbook sshをRHEL 5.4ボックスに追加する前にも起こりました)。

pdate: Fedoraでどのように発生したかを覚えています。ターミナルを開いて、FreeVMで仮想マシンのコンソール(シェル)を使用しました。サイズは80 x 25だったと思いますが、しばらくしてターミナルのサイズを約130 x 50に変更すると、(VMの)「内部シェル」の動作がおかしくなりました)。

85
nonopolarity

Bashを使用している場合は、「checkwinsize」オプションがセッションでアクティブになっているかどうかを確認します。

shopt | grep checkwinsize

あなたが得ないなら

checkwinsize    on

次にそれをアクティブにします

shopt -s checkwinsize

Bashのドキュメントには「checkwinsize」属性が記載されています。

「設定されている場合、Bashは各コマンドの後にウィンドウサイズをチェックし、必要に応じてLINESおよびCOLUMNSの値を更新します。」

設定が気に入った場合は、~/.bashrccheckwinsizeを有効にすることができます。

  • 有効化するには:shopt -s checkwinsize
  • 無効にするには:shopt -u checkwinsize
105
Arcadien

あなたが試すことができます Ctrl+L。プログラムに応じて、端末画面をクリアまたは再描画します。

19
BlueBomber

これらのオプションをdocker execに追加すると問題が解決したようです

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM
13
Oran Agra

同じ問題があり、bashがSIGWINCHシグナルを受信しないと信じているため、上記のレシピはどれも機能しませんでした。これは、親プロセスによってトラップされます。

ようやく解決策を見つけました。 .bashrcに追加しました:

export Prompt_COMMAND="resize &>/dev/null ; $Prompt_COMMAND"

これで、新しいプロンプトが表示されるたびに、ウィンドウが再調整されます。

Prompt_COMMANDを改善してくれた Kmonkey に感謝します。

10
Anthony Scemama

MacOSでzshを使用しているときに、同じ問題に直面することがあります。 resetコマンドを呼び出すだけで、ターミナルが再び好みに合わせて設定されます。

6
nonocut

私はアルカディアンがすでに述べたことに追加したかっただけです。 checkwinsizeを有効にするとうまくいきますが、私にとっては、ウィンドウが適切に機能するようにウィンドウのサイズをリセットする必要がありました。 checkwinsizeはこれを排除するためのものだったと思いますが、それでも、試してみる価値はあります。このオプションの後に、ウィンドウのサイズを変更するか、最大化を解除して最大化してみてください。

6
saketrp

私はあなたと同じ問題を抱えていましたが、これが私がしたことです:
ユーザーに.profile設定があるので、ここですべての変更を行います。

xtermというパッケージがあり、apt-getから入手できます。yumについては知りません。しかし、インストール権限がないため、ソースからローカルインストールを実行しました。リンク: http://invisible-island.net/xterm/#download

./configure --prefix=/the/path/you/want/to/install/to
make
make install

パスをプロファイルにエクスポートし、同じ場所で呼び出しました

export PATH=$PATH:/the/path/you/want/to/install/to
resize

そのため、ログインするたびに、端末サイズがサイズ変更によってそれに応じて設定されます。

2
FoldedChromatin

stty saneをお試しください。それはあなたが必要なことをするはずです。

2
phil294

まあ、それは一般的な問題であり、簡単な解決策があるはずです。

Ctrl + A Ctrl + Lなどの他の方法が機能しない場合は、sttyを使用してみてください。

  1. Ctrl + T:ローカルシェルで新しいタブを開きます。
    または:画面を離れて(Ctrl + A Dで切り離す)、SSHセッションからログアウトします。
  2. stty -a | grep rows:行と列の数を取得します。
    例:speed 38400 baud; rows 33; columns 133; line = 0;
  3. リモートタブに戻るか、ログインして画面を再接続します。 sttyの出力は異なるはずです。
    例:speed 38400 baud; rows 47; columns 177; line = 0;
  4. stty rows Nおよびstty columns Nここで、Nは(実際の)数値(画面外)です。例:$ stty rows 33; stty columns 133

ターミネーターを使用する場合、最初の3つのステップは省略できます。上部に列と行の数が表示されるためです。

これを実行するためにターミナルウィンドウのサイズを変更する必要はありません。管理者は通常、異なるコンピューターからログインし、接続されているモニターのサイズ(解像度)が異なる場合、最大化されたウィンドウのサイズはコンピューターごとに異なります。これを頻繁に実行することは実際にはかなり困難です。

その結果、一部のmanページが正しく表示されないだけではありません。ページャーを使用するものはほとんど何でも-最初の数行が欠落していることがよくあります(たとえば)。そして、VIMがこのように整列されていない端子で使用されることを考えないでください。それを置き換えるために3行目(V)を強調表示したいのですが、そうすると、強調表示されたテキストは別の行。

1
basic6