最初,我以为 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'
。