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

How to Not Overwrite Previous Terminal Contents

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

基本上,每当我在某些计算机上使用 vimless 时,以前的终端内容会被当前文件的缓冲区覆盖(我认为)。如果我用滚动条向后滚动,而不是当前程序的命令,我可以看到以前的终端内容,但是以前的一些行已经被当前程序覆盖了。似乎有多少行通过了缓冲区(我认为),例如 vim,终端的前几行被覆盖了。当我退出 vim/less 时,这些行仍然被覆盖,尽管它们出现在历史记录中并且当我按 up 进入 "back" 浏览历史记录时。

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

每当我用more的时候,不管用什么电脑,都会出现前一种现象,不过我用的more不多,因为我比较喜欢less各种方式,所以我还没有测试它的极限。

我遇到前一种现象的 computers/virtual 终端似乎是较旧的计算机 and/or 具有较少功能和规格的计算机,这是有道理的,因为大多数人可能会想要后者,但它是可能更难完成,需要更多的处理能力和内存。

有以前经验的计算机是:我工作中的 2 台旧 RedHat,可能是 2000 年末 s/early 2010 年的,我从 Windows 7 电脑 Penguinet; Android phones/tablets 终端 Rex IDE 我 "install the system"。在大多数 Android 终端应用程序上,我无法获得 vimless,甚至 vi,但我可以获得 more。当我将 vagrantGit Bash 一起使用时,默认 TERM 值为 msys,终端全乱了,我遇到了大部分相同的行为,但更糟。当我把 TERM 改成 cygwinxterm 时,效果更好。

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

大多数这些计算机都在使用 bash,但是当我在我最新的 ubuntu 计算机上安装和使用 fish 时,我仍然遇到了较新的现象,即使我将其设置为默认 shell,我不认为 Git Bash 在技术上是 bash,尽管它可能是。我相信 Terminal Rex 应用程序在安装到系统时使用了 bash,但是当我用其他终端应用程序检查 SHELL 环境变量时,以及在没有安装系统的情况下使用 Terminal Rex,它报告作为 sh.

我对为什么会出现这些行为很感兴趣,但我 对将其更改为更理想的行为的方法更感兴趣。 有没有办法让 vimless 在支持 older/less 的计算机上的行为更像在较新的计算机上的行为? 另外,是有没有办法让 Git Bash 向后滚动文件而不是空白终端?

奖励:有没有办法让 more 在较新的计算机上表现得更像 less?或者这只是 moreless 之间的区别?想一想,有没有可能在性能较差的计算机上 less 实际上是 more

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

  • 当它使用时,当您运行全屏程序时终端切换到备用屏幕,例如vim.
  • 使用时,终端在运行正在全屏程序时继续正常屏幕。

normal/alternate 屏幕大小相同:终端的可见部分忽略 回滚区域。您可以使用鼠标查看回滚。如果您在切换到备用屏幕时这样做,您可以看到当前(备用)屏幕旁边的回滚。切换回来后,例如,当 vim 退出时,前几行将显示在整个回滚和当前(正常)屏幕中。两者之间没有标记

normal/alternate 屏幕的某些方面最近在

中进行了讨论

Unix 上的大多数应用程序(以及 Linux 和 BSD 以及...)都注意 TERM 环境变量,它们(或诸如 ncurses) uses to retrieve information from the terminal database 的库。在原则上,可以为不同的应用程序分别设置 TERM 以引发不同的行为(需要注意的是,某些应用程序如 vim 具有内置表 "fix" 他们可能应用的终端数据库没有警告)。例如,运行ning 在 POSIX shell(或 bash 之类的东西)中,您可以将其键入 运行 vim 和 less 两个不同的终端描述:

TERM=vt100 vim foo.c
TERM=xterm less foo.c