なぜ面倒?
スクロールバックバッファを消去するのは多くの点で便利です。たとえば、長い出力でいくつかのコマンドを実行し、その出力の先頭にすばやくスクロールしたいとします。スクロールバックバッファがクリアされたら、一番上までスクロールすると完了です。
いくつかの注意:
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