我有两行提示,如下所示。是否有像clear
这样的命令可以清除屏幕,但保持提示符的两行行?
~/current/directory git-branch*
$ echo 'hello...
答案 0 :(得分:0)
简短:不,没有这样的命令。
long:你可以编写脚本。以下是该主题的简要介绍。
clear
程序会清除整个屏幕。您的shell将绘制一个新提示(位于新清除屏幕的顶部)。但是假设你想在命令完成之前清除部分屏幕,然后返回shell。
您使用的大多数终端都支持ANSI转义序列,该转义序列从当前光标位置清除到屏幕末尾,即terminfo capability ed
:
clr_eos ed cd clear to end of
screen (P*)
由infocmp
显示为ed=\E[J
。
您可以在脚本中使用它,例如,使用tput
:
tput ed
这是“ansi.sys”与ANSI标准不同的区域之一(实际上是ECMA-48,请参阅 8.3.29 ERASE IN PAGE
)。 ansi.sys
收到
printf '\033]J'
有些人将其硬编码为脚本,并假设“ansi.sys”符合标准。请参阅ncurses常见问题解答中的 How do I get color with VT100? 。
注意到有关如何测试此问题的评论:可能在提示下方的屏幕上没有任何内容。因此,键入tput ed
似乎无能为力。如上所述,它清除光标下面的 。如果你想在(2行)提示上方清除,那就更复杂了:
如果您的提示恰好位于屏幕的第一行,则可以使用光标位置报告检测 。但这比措辞所预期的问题更复杂。假设上面有空格:
tput sc
tput cuu 2
tput cub 999
printf '\033[1J'
tput rc
此处使用常规printf
而不是tput
,因为没有为该类型的擦除定义的预定义terminfo(或termcap)功能。
如果您想要处理提示在终端顶行开始的情况,您必须找到当前行号并决定是否进行上述清算(或不)。
进一步阅读: