何必呢?
清除回滚缓冲区在很多方面都很方便,例如,当我希望运行一些具有长输出的命令,并希望快速滚动到该输出的开头时。当回滚缓冲区被清除时,我可以滚动到顶部,然后就完成了。
一些注意事项:
clear
根据人的说法,有命令,
清除如果可能的话,清除屏幕,包括其回滚缓冲区(如果定义了扩展的“E3”功能)。
在 gnome 终端clear
中不是清除回滚缓冲区。(但是,“E3”功能是什么?)
还有reset
,它会清除,但它的作用远不止于此,而且速度非常慢(在我的系统上,它需要一秒多的时间,这对于人类来说是一个明显的延迟)。
还有echo -ne '\ec'
orecho -ne '\033c'
可以完成这项工作。而且确实比 快得多reset
。
问题是,什么是\ec
序列,它与什么clear
和reset
做什么有什么不同,以及为什么没有单独的命令?
还有 readline 的C-l
按键序列,它默认绑定到clear-screen
命令(我的意思是 readline 命令,而不是 shell 命令)。这个命令是什么?它发出哪个转义序列?它实际上是如何运作的?它运行 shell 命令吗?或者是什么?同样,在 gnome-terminal 中,它似乎只是通过吐出空行来工作,直到提示出现在终端的顶行。不确定其他终端模拟器。这是非常麻烦的行为。它会用大块的空白污染回滚,所以你必须向上滚动越来越多。这就像一个 hack,而不是干净的解决方案。
另一个问题是,是否有针对上述序列的 readline 命令\ec
?我想把它绑定到C-l
因为我总是想要在清除屏幕时清除回滚缓冲区。
另一个问题是如何只需输入这样的转义序列进入终端,以执行所需的操作?然后不必考虑绑定C-l
到另一个 readline 命令(如果存在这样的命令)。我尝试输入Esc
,c
但这不起作用。
更新 这个问题主要在这里回答:https://unix.stackexchange.com/a/375784/257159。这是一个非常好的答案,几乎解释了这里提出的所有问题。
答案1
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