端末スクロールバックバッファをクリアする最も簡単な方法+詳細な説明は何ですか?

端末スクロールバックバッファをクリアする最も簡単な方法+詳細な説明は何ですか?

なぜ面倒?

スクロールバックバッファを消去するのは多くの点で便利です。たとえば、長い出力でいくつかのコマンドを実行し、その出力の先頭にすばやくスクロールしたいとします。スクロールバックバッファがクリアされたら、一番上までスクロールすると完了です。

いくつかの注意:

clear人には命令がありますが、

明らか可能であれば、スクロールバックバッファを含む画面を消去します(拡張「E3」機能が定義されている場合)。

GNOME端末clearからいいえスクロールバックバッファをクリアします。 (ところで「E3」機能とは何ですか?)

またreset、それは消去されますが、それ以上を実行して非常に遅いです(私のシステムでは1秒以上かかり、これは人間にとって目立つ遅延です)。

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

問題は、\ecシーケンスが何であるか、何をclearするresetのか、そしてなぜ別のコマンドがないのかです。

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

もう一つの質問は、上記のシーケンスに対するreadlineコマンドがありますか\ec?縛りたいのですC-lいつも画面を消去するときにスクロールバックバッファを消去したいと思います。

もう一つの質問はどうですかただ入力してください目的のタスクを実行するには、端末にこれらのエスケープシーケンスが必要ですか?これにより、他のreadlineコマンドにバインドすることを考える必要はありませんC-l(そのコマンドが存在する場合)。入力Escしようとしましたがc機能しません。

修正する この質問に対する答えは主に次のとおりです。https://unix.stackexchange.com/a/375784/257159。これは、ここに尋ねるほとんどすべての質問を説明する非常に良い答えです。

答え1

~からman bash読む行の部分:

   clear-display (M-C-l)
          Clear  the  screen  and,  if possible, the terminal's scrollback buffer, then redraw the current line, leaving the
          current line at the top of the screen.
   clear-screen (C-l)
          Clear the screen, then redraw the current line, leaving the current line at the top of the screen.  With an  argu‐
          ment, refresh the current line without clearing the screen.

Ctrl + Alt + Lを押します。

答え2

多くの端末エミュレータは同じエスケープシーケンスを使用します。Xタム、または同様です。 XTermの場合はEscc「RIS(完全リセット)」と定義されます。フルリセットを実行すると、スクロールバックバッファがクリアされるのは妥当です。


readlineシーケンス自体へのバインディングを使用して成功しませんでしたが、回避策は次のとおりです。

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

これにはいくつかの注意事項があります。まず、printfコマンドをシェル履歴に入れますが、これは理想的ではありません。次に、コマンドを入力するときは使用できません。現在の入力行が上書きされます。

答え3

これは私にとって効果的です。

printf '\033[3J'

clearマンページから)

答え4

「https://invisible-island.net/ncurses/terminfo.ti.html#tic-xterm-basic」の一部(注「\Eはエスケープ(\ 033)文字を表します。」およびE3=\E[3J

#### VT100/ANSI/ECMA-48
#
# ANSI Standard (X3.64) Control Sequences for Video Terminals and Peripherals
# and ECMA-48 Control Functions for Coded Character Sets.
#
# Much of the content of this comment is adapted from a table prepared by
# Richard Shuford, based on a 1984 Byte article.  Terminfo correspondences,
# discussion of some terminfo-related issues, and updates to capture ECMA-48
# have been added.  Control functions described in ECMA-48 only are tagged
# with * after their names.
#
# The table is a complete list of the defined ANSI X3.64/ECMA-48 control
# sequences.  In the main table, \E stands for an escape (\033) character,
# SPC for space.  Pn stands for a single numeric parameter to be inserted
# in decimal ASCII.  Ps stands for a list of such parameters separated by
# semicolons.  Parameter meanings for most parameterized sequences are
# described in the notes.
#
# Sequence     Sequence                             Parameter   or
# Mnemonic     Name              Sequence           Value      Mode   terminfo
# -----------------------------------------------------------------------------
# APC  Applicatn Program Command \E _                -         Delim  -
# BEL  Bell *                    ^G                  -         -      bel
# BPH  Break Permitted Here *    \E B                -         *      -
# BS   BackSpace *               ^H                  -         EF     -
# CAN  Cancel *                  ^X                  -         -      -   (A)
# CBT  Cursor Backward Tab       \E [ Pn Z           1         eF     cbt
# CCH  Cancel Previous Character \E T                -         -      -
# CHA  Cursor Horizntal Absolute \E [ Pn G           1         eF     hpa (B)
# CHT  Cursor Horizontal Tab     \E [ Pn I           1         eF     tab (C)
# CMD  Coding Method Delimiter * \E
# CNL  Cursor Next Line          \E [ Pn E           1         eF     nel (D)
# CPL  Cursor Preceding Line     \E [ Pn F           1         eF     -
# CPR  Cursor Position Report    \E [ Pn ; Pn R      1, 1      -      -   (E)
# CSI  Control Sequence Intro    \E [                -         Intro  -
# CTC  Cursor Tabulation Control \E [ Ps W           0         eF     -   (F)
# CUB  Cursor Backward           \E [ Pn D           1         eF     cub
# CUD  Cursor Down               \E [ Pn B           1         eF     cud
# CUF  Cursor Forward            \E [ Pn C           1         eF     cuf
# CUP  Cursor Position           \E [ Pn ; Pn H      1, 1      eF     cup (G)
# CUU  Cursor Up                 \E [ Pn A           1         eF     cuu
[1]: https://i.stack.imgur.com/IE2gD.png

関連情報