清除终端回滚缓冲区的最简单方法+一些更深入的解释?

清除终端回滚缓冲区的最简单方法+一些更深入的解释?

何必呢?

清除回滚缓冲区在很多方面都很方便,例如,当我希望运行一些具有长输出的命令,并希望快速滚动到该输出的开头时。当回滚缓冲区被清除时,我可以滚动到顶部,然后就完成了。

一些注意事项:

clear根据人的说法,有命令,

清除如果可能的话,清除屏幕,包括其回滚缓冲区(如果定义了扩展的“E3”功能)。

在 gnome 终端clear不是清除回滚缓冲区。(但是,“E3”功能是什么?)

还有reset,它会清除,但它的作用远不止于此,而且速度非常慢(在我的系统上,它需要一秒多的时间,这对于人类来说是一个明显的延迟)。

还有echo -ne '\ec'orecho -ne '\033c'可以完成这项工作。而且确实比 快得多reset

问题是,什么是\ec序列,它与什么clearreset做什么有什么不同,以及为什么没有单独的命令?

还有 readline 的C-l按键序列,它默认绑定到clear-screen命令(我的意思是 readline 命令,而不是 shell 命令)。这个命令是什么?它发出哪个转义序列?它实际上是如何运作的?它运行 shell 命令吗?或者是什么?同样,在 gnome-terminal 中,它似乎只是通过吐出空行来工作,直到提示出现在终端的顶行。不确定其他终端模拟器。这是非常麻烦的行为。它会用大块的空白污染回滚,所以你必须向上滚动越来越多。这就像一个 hack,而不是干净的解决方案。

另一个问题是,是否有针对上述序列的 readline 命令\ec?我想把它绑定到C-l因为我总是想要在清除屏幕时清除回滚缓冲区。

另一个问题是如何只需输入这样的转义序列进入终端,以执行所需的操作?然后不必考虑绑定C-l到另一个 readline 命令(如果存在这样的命令)。我尝试输入Escc但这不起作用。

更新 这个问题主要在这里回答: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.

所以按 Control + Alt + L

答案2

许多终端模拟器使用相同的转义序列XTerm,或类似的。对于 XTerm,Escc定义为“完全重置 (RIS)”。完全重置将清除回滚缓冲区似乎是合理的。


我没有成功地使用readline绑定到序列本身,但解决方法是

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

这有一些注意事项。首先,它将printf命令放入 shell 历史记录中,这并不理想。其次,输入命令时不能使用;它会覆盖当前输入行。

答案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

相关内容