用两行提示清除终端屏幕,并保持两行都可见



我有一个两行提示符,如下所示。有没有像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:变量中的光标位置

相关内容

  • 没有找到相关文章

最新更新