web-dev-qa-db-ja.com

`clear`がスクロールバックバッファーをクリアしないようにする方法

最初は、16.04のターミナルアプリケーションで無制限のスクロールが機能しないと思っていました。 「スクロールバックを制限する」オプションがオフになっています。スクロールすることもあればしないこともあります。それから、clearコマンドを使用してもスクロールしないことに気付きました。 1つの画面だけをスクロールします。

クリアを多く使用します(3つのコマンドごとにほぼ1回)。

Terminfoへの明確なポイントのmanページ。 terminfoにはいくつかのオプションがありますが、オプションを定義できる設定ファイルが見つかりません。/lib/terminfo /の下にあるすべてのファイルは、clearがその設定を読み取っているように見えるので、コンパイルされた形式であり、理解できません。

14.04(推測)以前にはこの問題は見られませんでした。

どんな助けも大歓迎です。

ありがとう。

4
stingray

あなたが望むのはタイプすることです CTRL+L clearの代わりに。

これにより、「フォームフィード」が端末に送信されます。基本的には、スクロールバックに影響を与えることなく、すべてを端末ウィンドウの高さまで移動して画面をクリアします。

8
bashBedlam

これを理解するのにしばらく時間がかかったので、どうやってこれを機能させたかを共有する必要があると思います。

「man clear」と入力すると、マニュアルの状態が表示されます。

clearは、スクロールバックバッファー(拡張された「E3」機能が定義されている場合)を含めて、可能であれば画面をクリアします。

このE3機能を削除します。

まず、端末のタイプを確認します。

echo $TERM

私にとって、これは「xterm-256color」になりました。それが出力するものは何でも、覚えておいてください。

次のコマンドを入力します。

infocmp -x xterm-256color > tempfile

Xterm-256colorを最初のコマンドからの出力で明らかに置き換える場所。これにより、この端末タイプの拡張機能が「tempfile」に出力されます。

次に、この新しく作成したファイルを編集します。あなたは探している:

E3=\E[3J,

これを見つけて削除するだけです。全体なので、次のように見えた場合:

    ...
    Cs=\E]12;%p1%s\007, E3=\E[3J,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
    ...

次のようになります。

    ...
    Cs=\E]12;%p1%s\007,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
    ...

ファイルを保存します。そして、ターミナルから次を実行します:

Sudo tic -x tempfile

これにより、変更されたterminfoがロードされ、保存されます。ターミナルを再起動すると、クリアはスクロールバッファを削除しなくなります。

5
polle

この回答は、スティングレイの回答(彼がいくつかの本当に良い仕事をした)から成り立っており、それを完成させることを意図しています。

1-スクロールバックを失うことなくクリアするには、コンソールで次のコマンドを入力します(stringrayの答えで提案されているpythonは不要です)。

printf '\33[H\33[2J'

2-これを覚える必要を避けるために、.bashrcファイルを編集してそのエイリアスを作成できます。エイリアスをclearと呼びます。 bashで、次を入力します。

nano ~/.bashrc

最後に次の行を追加します。

alias clean="printf '\33[H\33[2J'"

私もdivを追加するのが好きです(ディバイダー用):

alias div='echo;echo "------------------------------------------------------------------------------";echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo "------------------------------------------------------------------------------";clean'

これにより、divコマンドを実行すると、間に10個の新しい行がある2つの仕切りが入力され、その後にクリーンコマンドが続きます。これにより、スクロールバックするときに、divを使用した場所を正確に知ることができます。

リストした手順の前にSudo suを実行すると、Sudo bashの動作を変更できます。

.bashrcを編集するとき、ticを使用するbashBedlamの答えよりもこれをお勧めします。

1)Sudo特権を必要とせず、外出先でも簡単に取得できます。

2)ユーザーにのみ影響します(すべてのユーザーが変更されたクリア機能を必要とするわけではありません)

3)通常bashrcに触れない更新を生き残ります

2
thebunnyrules

@heemaylと@bashBedlamありがとうございます。

CTRL + Lは、私が望むことをします。しかし、私はいつも「clear」と入力することに慣れています。だから、ubuntu 12.04から/ lib/xterm/x/{xterm、xterm-256color}をコピーして、それを回避しました。このファイルを保存する$ TERMという名前の環境変数があります。それから私はあなたの答えを読んでCTRL + Lを試してみましたが、うまくいきました。私は好奇心got盛で、CTRL + Lをスクリプトに入れることができるかどうかを確認しようとしましたが、どこにも行きませんでした。それから私はstraceが私が欲しいものを与えるかもしれないことを思い出した。そこでstrace clearを実行すると、画面をクリアするために "\ 33 [H\33 [2J"と書き込まれていることがわかりました。そこで、python oneliner print( "\ 33 [H\33 [2J"))を作成してファイルに入れ、それを指すようにclearという名前のリンクを追加しました。 2つの回避策があります。私は、terminfoファイルをどのように読み取り、変更できるかについて、まだ興味があります。

再度、感謝します。

1
stingray