我不确定这是否重复,但是我不知道要查找什么,因为我不知道这种现象的名称。
基本上,只要我使用vim和less某些计算机上,以前的终端内容由当前文件(我认为)的缓冲液覆盖。如果我使用滚动条而不是当前程序的命令向后滚动,则可以看到以前的终端内容,但是当前程序已覆盖了前面的某些行。好像有很多行经过(例如,)的缓冲区vim是覆盖终端的前几行。当我退出vim/时less,这些行仍然被覆盖,尽管它们显示在历史记录中,并且当我按一下up以“浏览”历史记录时。
vim
less
up
但是,在其他计算机上,会发生完全不同的事情。当我使用vim或时less,如果上下滚动,则看不到终端的前几行。实际上,在大多数发生这种现象的计算机上,如果我用鼠标向后滚动,vim然后less在当前缓冲区中的文件中向后滚动,就像按Ctrl-E/一样Ctrl-Y。当我退出vim/时less,根本看不到文件,只能看到终端的先前内容,就像打开文件之前所做的一样。
Ctrl-E
Ctrl-Y
无论何时使用more,无论我使用什么计算机,都会出现前一种现象,但是我使用的more并不多,因为我less在各个方面都比较喜欢,所以我没有测试其限制。
more
我经历过前一种现象的计算机/虚拟终端似乎是较旧的计算机和/或功能和规格较弱的计算机,这很有意义,因为大多数人可能希望使用后者,但是这可能更难实现且需要更多处理能力和记忆。
具有以前经验的计算机是:RedHat我工作的2个旧计算机,可能来自2000年代末/ 2010年初,我从Windows 7带有Penguinet;Android我在“安装系统”中使用Terminal Rex IDE的手机/平板电脑。在大多数Android终端应用程序上,我虽然无法获得vim,less甚至无法vi获得more。当我vagrant与Git Bash配合使用时,默认TERM值为msys,终端全被搞砸了,我经历了大多数相同的行为,但是更糟。当我更改TERM为cygwin或时xterm,效果更好。
RedHat
Windows 7
Penguinet
Android
vi
vagrant
Git Bash
TERM
msys
cygwin
xterm
(对我而言)行为更理想的计算机是:我最新的笔记本电脑Ubuntu 15.04(是的,Linux预装了cmputer );过去几年中我在Windows 8笔记本电脑上安装的任何Linux VM,但是我只有最新版本,所以我不知道这种行为有多旧。Git Bash在我的Windows 8笔记本电脑上。Git Bash当我使用鼠标滚动时没有滚动浏览文件,而是通过空终端滚动浏览文件,但这可能是由于vimrc/中的设置lessrc。当我退出时Git Bash,它仍然显示所有以前的行,而不是文件。
Ubuntu 15.04
Linux
vimrc
lessrc
这些计算机中的大多数都在使用bash,但是即使在我将其设置为默认外壳的情况下,即使在fish最新的ubuntu计算机上安装和使用时,我仍然会遇到这种较新的现象,尽管可能确实如此,但我不认为这Git Bash是技术上的问题bash。我相信该Terminal Rex应用程序bash在安装到系统后会使用,但是当我在SHELL其他终端应用程序以及未安装系统的Terminal Rex中检查环境变量时,报告为sh。
bash
fish
ubuntu
Terminal Rex
SHELL
sh
我对为什么会发生这些行为感兴趣,但是我对将其更改为更理想的行为的方法 更 感兴趣。 有没有办法使vim&less在较旧/功能较弱的计算机上的行为更像较新的计算机上的行为?另外,有没有办法使Git Bash文件回滚而不是空白终端?
奖励 :有没有办法使more行为更像是less在较新的计算机上?还是这仅仅是more和之间的区别less?想一想,less能力较弱的计算机上是否真的有可能more?
描述的行为是xterm样式的 备用屏幕 。有两种情况:
普通/备用屏幕的大小相同:终端的可见部分 忽略 了回滚区域。您可以使用鼠标查看回滚。如果在切换到备用屏幕的同时执行此操作,则可以看到当前(备用)屏幕旁边的回滚。切换回去后,例如,当vim退出时,在回滚和当前(正常)屏幕上会显示前几行。两者之间没有标记。
最近在“什么机制允许ViM临时覆盖整个控制台”中 讨论了正常/备用屏幕的某些方面?
Unix(以及Linux和BSD等)上的大多数应用程序都注意TERM环境变量,它们(或ncurses之类的库)用来从终端数据库中检索信息。原则上,可以TERM为不同的应用程序分别设置以引发不同的行为(需要注意的是,某些应用程序,例如vim都具有内置表来“修复”它们可能会在没有警告的情况下应用的终端数据库)。例如,在POSIX shell(或诸如bash之类的东西)中运行,您可以输入以下命令来运行vim,并使用两个不同的终端描述进行运行:
TERM=vt100 vim foo.c TERM=xterm less foo.c