我有一个两行提示符,如下所示。有没有像clear
这样的命令可以清除屏幕,但使提示的两行都可见?
~/current/directory git-branch*
$ echo 'hello...
short:不,没有这样的命令。
long:您可以编写脚本。这是对这个话题的简要介绍。
clear
程序清除整个屏幕。您的shell将绘制一个新的提示(在新清除的屏幕顶部)。但是,假设您希望在命令完成并返回shell之前清除屏幕的部分内容。
您将使用的大多数终端都支持ANSI转义序列,该序列从当前光标位置清除到屏幕末尾,这就是终端功能ed
:
clr_eos ed cd clear to end of
screen (P*)
由CCD_ 4表示为CCD_。
您可以在脚本中使用它,例如使用tput
:
tput ed
这是"ansi.sys"与ansi标准(实际上是ECMA-48,请参见8.3.29 ERASE IN PAGE
)不同的地方之一。ansi.sys
接收时清除整个屏幕
printf ' 33]J'
有些人将其硬编码到脚本中,并假设"ansi.sys"符合标准。请参见如何使用VT100获得颜色。
注意到关于如何测试的评论:提示下方的屏幕上可能什么都没有。因此,键入tput ed
可能看起来毫无作用。如上所述,它清除光标下方的。如果你想清除(2行)以上的提示,那就有点复杂了:
- 保存光标位置
- 将光标上移两行
- 清除光标前的
- 恢复光标位置
如果您的提示恰好在屏幕的第一行,则可以使用光标位置报告检测到此。但这比所提出的问题要复杂得多。假设上面有空间:
tput sc
tput cuu 2
tput cub 999
printf ' 33[1J'
tput rc
这里使用常规的printf
而不是tput
,因为没有为该类型的擦除定义预定义的terminfo(或termcap)能力。
如果您想处理提示从终端的顶行开始的情况,您必须找到当前行编号,并决定是否执行上述清除操作。
进一步阅读:
- Re:变量中的光标位置