web-dev-qa-db-ja.com

ターミナルのスクロールバックバッファをクリアする最も簡単な方法+いくつかのより深い説明?

なぜわざわざ?

スクロールバックバッファをクリアすると、多くの点で便利です。たとえば、長い出力でコマンドを実行したい場合や、すばやくスクロールしてこの出力を開始したい場合などです。スクロールバックバッファーがクリアされたら、上にスクロールするだけで完了です。

いくつかの考慮事項:

男によると、clearコマンドがあります。

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

Gnome-terminalでは、clearはスクロールバックバッファをクリアしませんしません。 (ただし、「E3」機能とは何ですか?)

クリアするresetもありますが、それよりも少し多く、非常に低速です(私のシステムでは、1秒以上かかるため、人間が気付くのにかなりの遅延があります)。

そして、仕事をするecho -ne '\ec'またはecho -ne '\033c'があります。実際、resetよりもはるかに高速です。

問題は、\ecシーケンスとは何か、それがclearおよびresetの動作とどのように異なるか、およびそれに対する個別のコマンドがないのはなぜですか?

ReadlineのC-lキーシーケンスもあり、デフォルトではclear-screenコマンド(つまり、Shellコマンドではなくreadlineコマンド)にバインドされています。このコマンドは何ですか?どのエスケープシーケンスを放出しますか?実際にはどのように機能しますか?シェルコマンドを実行しますか?または何?繰り返しますが、gnome-terminalでは、ターミナルの最上行にプロンプ​​トが表示されるまで空白行を吐き出すだけで機能するようです。他のターミナルエミュレータについてはよくわかりません。これは非常に面倒な動作です。それは空の塊でスクロールバックを汚染するので、もっと上にスクロールする必要があります。クリーンなソリューションというよりは、ハックのようなものです。

別の質問は、言及された\ecシーケンスのreadlineコマンドはありますか?代わりにC-lにバインドしたいのは、画面をクリアするときに常にスクロールバックバッファーをクリアしたいためです。

そして別の質問は、そのようなエスケープシーケンスを端末に入力するだけで、目的のアクションを実行する方法です。次に、C-lを別のreadlineコマンドにバインドすることを考える必要はありません(そのようなコマンドが存在する場合)。 Esc、次にcと入力してみましたが、機能しません。

[〜#〜] update [〜#〜]この質問の大部分はここに回答: https://unix.stackexchange.com/a/375784/257159 。ここで尋ねられるほとんどすべての質問を説明するのは非常に良い答えです。

3
tosh

多くのターミナルエミュレータは、 XTerm などと同じエスケープシーケンスを使用します。 XTermの場合、 Escc 「フルリセット(RIS)」として定義されます。完全にリセットするとスクロールバックバッファがクリアされるのは妥当なようです。


readlineを使用してシーケンス自体にバインドすることに成功していませんが、回避策は次のとおりです。

bind '"\C-l": "\C-a\C-kprintf\ "\\033c"\C-m"'

これにはいくつかの注意点があります。まず、シェルの履歴にprintfコマンドを配置しますが、これは理想的ではありません。第二に、コマンドの入力中には使用できません。現在の入力行を上書きします。

2
Fox

これは、ターミナルと履歴/スクロールバックをクリアするために私が見つけた最高のものです

clear && history -c
0
user395728