一尘不染

如何不覆盖以前的终端内容

linux

我不确定这是否重复,但是我不知道要查找什么,因为我不知道这种现象的名称。

基本上,只要我使用vimless某些计算机上,以前的终端内容由当前文件(我认为)的缓冲液覆盖。如果我使用滚动条而不是当前程序的命令向后滚动,则可以看到以前的终端内容,但是当前程序已覆盖了前面的某些行。好像有很多行经过(例如,)的缓冲区vim是覆盖终端的前几行。当我退出vim/时less,这些行仍然被覆盖,尽管它们显示在历史记录中,并且当我按一下up以“浏览”历史记录时。

但是,在其他计算机上,会发生完全不同的事情。当我使用vim或时less,如果上下滚动,则看不到终端的前几行。实际上,在大多数发生这种现象的计算机上,如果我用鼠标向后滚动,vim然后less在当前缓冲区中的文件中向后滚动,就像按Ctrl-E/一样Ctrl-Y。当我退出vim/时less,根本看不到文件,只能看到终端的先前内容,就像打开文件之前所做的一样。

无论何时使用more,无论我使用什么计算机,都会出现前一种现象,但是我使用的more并不多,因为我less在各个方面都比较喜欢,所以我没有测试其限制。

我经历过前一种现象的计算机/虚拟终端似乎是较旧的计算机和/或功能和规格较弱的计算机,这很有意义,因为大多数人可能希望使用后者,但是这可能更难实现且需要更多处理能力和记忆。

具有以前经验的计算机是:RedHat我工作的2个旧计算机,可能来自2000年代末/ 2010年初,我从Windows 7带有PenguinetAndroid我在“安装系统”中使用Terminal Rex
IDE的手机/平板电脑。在大多数Android终端应用程序上,我虽然无法获得vimless甚至无法vi获得more。当我vagrantGit Bash配合使用时,默认TERM值为msys,终端全被搞砸了,我经历了大多数相同的行为,但是更糟。当我更改TERMcygwin或时xterm,效果更好。

(对我而言)行为更理想的计算机是:我最新的笔记本电脑Ubuntu 15.04(是的,Linux预装了cmputer );过去几年中我在Windows
8笔记本电脑上安装的任何Linux VM,但是我只有最新版本,所以我不知道这种行为有多旧。Git Bash在我的Windows 8笔记本电脑上。Git Bash当我使用鼠标滚动时没有滚动浏览文件,而是通过空终端滚动浏览文件,但这可能是由于vimrc/中的设置lessrc。当我退出时Git Bash,它仍然显示所有以前的行,而不是文件。

这些计算机中的大多数都在使用bash,但是即使在我将其设置为默认外壳的情况下,即使在fish最新的ubuntu计算机上安装和使用时,我仍然会遇到这种较新的现象,尽管可能确实如此,但我不认为这Git Bash是技术上的问题bash。我相信该Terminal Rex应用程序bash在安装到系统后会使用,但是当我在SHELL其他终端应用程序以及未安装系统的Terminal
Rex中检查环境变量时,报告为sh

我对为什么会发生这些行为感兴趣,但是我对将其更改为更理想的行为的方法 感兴趣。
有没有办法使vimless在较旧/功能较弱的计算机上的行为更像较新的计算机上的行为?另外,有没有办法使Git Bash文件回滚而不是空白终端?

奖励
:有没有办法使more行为更像是less在较新的计算机上?还是这仅仅是more和之间的区别less?想一想,less能力较弱的计算机上是否真的有可能more


阅读 493

收藏
2020-06-07

共1个答案

一尘不染

描述的行为是xterm样式的 备用屏幕 。有两种情况:

  • 当它 使用时,终端切换到 备用 屏幕时运行全屏程序如VIM。
  • 如果 使用,则在运行全屏程序时终端会在 正常 屏幕中继续运行。

普通/备用屏幕的大小相同:终端的可见部分 忽略
了回滚区域。您可以使用鼠标查看回滚。如果在切换到备用屏幕的同时执行此操作,则可以看到当前(备用)屏幕旁边的回滚。切换回去后,例如,当vim退出时,在回滚和当前(正常)屏幕上会显示前几行。两者之间没有标记。

最近在“什么机制允许ViM临时覆盖整个控制台”中 讨论了正常/备用屏幕的某些方面?

Unix(以及Linux和BSD等)上的大多数应用程序都注意TERM环境变量,它们(或ncurses之类的库)用来从终端数据库中检索信息。原则上,可以TERM为不同的应用程序分别设置以引发不同的行为(需要注意的是,某些应用程序,例如vim都具有内置表来“修复”它们可能会在没有警告的情况下应用的终端数据库)。例如,在POSIX
shell(或诸如bash之类的东西)中运行,您可以输入以下命令来运行vim,并使用两个不同的终端描述进行运行:

TERM=vt100 vim foo.c
TERM=xterm less foo.c
2020-06-07