なぜわざわざ?
スクロールバックバッファをクリアすると、多くの点で便利です。たとえば、長い出力でコマンドを実行したい場合や、すばやくスクロールしてこの出力を開始したい場合などです。スクロールバックバッファーがクリアされたら、上にスクロールするだけで完了です。
いくつかの考慮事項:
男によると、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 。ここで尋ねられるほとんどすべての質問を説明するのは非常に良い答えです。
多くのターミナルエミュレータは、 XTerm などと同じエスケープシーケンスを使用します。 XTermの場合、 Escc 「フルリセット(RIS)」として定義されます。完全にリセットするとスクロールバックバッファがクリアされるのは妥当なようです。
readline
を使用してシーケンス自体にバインドすることに成功していませんが、回避策は次のとおりです。
bind '"\C-l": "\C-a\C-kprintf\ "\\033c"\C-m"'
これにはいくつかの注意点があります。まず、シェルの履歴にprintf
コマンドを配置しますが、これは理想的ではありません。第二に、コマンドの入力中には使用できません。現在の入力行を上書きします。
これは、ターミナルと履歴/スクロールバックをクリアするために私が見つけた最高のものです
clear && history -c