如何阻止“clear”清除回滚缓冲区

如何阻止“clear”清除回滚缓冲区

最初,我以为 16.04 上的终端应用程序不支持无限滚动。我取消选中了“限制回滚至”选项。有时它会回滚,有时则不会。后来我意识到,每当我使用clear命令时,它都不会回滚。它只会回滚一个屏幕。

我经常使用 clear (几乎每 3 个命令就使用一次)。

clear 的手册页指向 terminfo。terminfo 上有一些选项,但我找不到可以定义这些选项的配置文件。clear 似乎从 /lib/terminfo/ 下读取其配置的所有文件都是编译格式的,我看不懂。

在 14.04 之前的版本中我没有看到这个问题(猜测)。

任何帮助是极大的赞赏。

谢谢。

答案1

我花了一段时间才弄清楚,所以我想我应该分享一下我是如何让它发挥作用的。

如果你输入“man clear”,你会看到手册中这样写道:

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

我们将删除此 E3 功能:

首先,找出你的终端类型:

echo $TERM

对我来说,结果是“xterm-256color”。无论它输出什么,都要记住。

现在输入命令:

infocmp -x xterm-256color > tempfile

显然,您要用第一个命令的输出替换 xterm-256color。这会将此终端类型的扩展功能输出到“tempfile”。

现在编辑这个新创建的文件。您正在寻找:

E3=\E[3J,

找到这个然后删除它。整个东西,所以如果它看起来像:

    ...
    Cs=\E]12;%p1%s\007, E3=\E[3J,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
    ...

现在看起来应该是这样的:

    ...
    Cs=\E]12;%p1%s\007,
    Ms=\E]52;%p1%s;%p2%s\007, Se=\E[2 q, Ss=\E[%p1%d q,
    ...

保存文件。然后从终端执行:

sudo tic -x tempfile

这将加载您修改后的 terminfo 并存储它。重新启动您的终端,清除现在应该不再删除滚动缓冲区

答案2

您需要输入的是CTRL+L而不是clear

这将向终端发送“换页”。基本上,它将所有内容移至终端窗口的高度,清除屏幕,而不会影响您的回滚。

答案3

这个答案建立在 Stingray 的答案之上(他对此做了一些非常好的工作)并且旨在完善它。

1 – 要清除而不丢失回滚,请在控制台中输入以下命令(不需要像 stringray 的答案中所建议的那样使用 python):

printf '\33[H\33[2J'

2 - 为了避免记住这一点,您可以编辑 .bashrc 文件以为其创建别名。我会将别名称为 clear。在 bash 中,输入:

nano ~/.bashrc

并在最后添加这一行:

alias clean="printf '\33[H\33[2J'"

我还喜欢添加 div(用于分隔符):

alias div='echo;echo "------------------------------------------------------------------------------";echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo;echo "------------------------------------------------------------------------------";clean'

这样,当您执行 div 命令时,它会进入两个分隔符,它们之间有 10 个新行,然后是清除命令。这样,当您向后滚动时,您就会确切知道您在哪里使用了 div。

您可以在我列出的步骤之前执行 sudo su 来更改 sudo bash 行为。

我建议你使用这个而不是 bashBedlam 的答案,使用 tic,因为编辑 .bashrc:

1)它不需要 sudo 权限,可以轻松使用。

2)仅影响你的用户(并不是所有的用户都会想要修改清除功能)

3) 不会影响到通常不影响 bashrc 的更新

答案4

如上所述,clear -x此方法可行。

但是,如果您像我一样,习惯性地clear每天打字数百次,并且不希望放弃训练手指,那么您可能需要创建一个简单的别名.bashrc(或等效别名),如下所示: alias clear='clear -x'

相关内容