我不确定这是否重复,但我不知道该搜索是什么,因为我不知道这个现象的名称。
基本上,每当我在某些计算机上使用vim
和less
时,先前的终端内容都会被当前文件的缓冲区覆盖(我认为)。如果我使用滚动条向后滚动,而不是当前程序的命令,我可以看到之前的终端内容,但是前面的一些行已被当前程序写入。似乎有很多行通过缓冲区(我认为),例如,vim
,是多少行的终端被覆盖了。当我退出vim
/ less
时,这些行仍会被覆盖,但它们会显示在历史记录中,当我按up
以“回溯”历史记录时。
但是,在其他计算机上,会发生一些完全不同的事情。当我使用vim
或less
时,如果我向上和向下滚动,我看不到终端的前一行。事实上,在发生这种现象的大多数计算机上,如果我用鼠标向后滚动,vim
和less
会向后滚动当前缓冲区中的文件,就好像我按了Ctrl-E
/ Ctrl-Y
。当我退出vim
/ less
时,我根本看不到该文件,我只看到终端的先前内容,就像我打开文件之前所做的一样。
每当我使用more
时,无论我使用什么计算机,前一种现象都会发生,但我并没有那么多地使用more
,因为我更喜欢less
,所以我没有测试它的极限。
我经历过前一种现象的计算机/虚拟终端似乎是较旧的计算机和/或具有较少功能和规格的计算机,这很有意义,因为大多数人可能会想要后者,但它可能更难完成并且需要更强大的处理能力和记忆力。
具有以前经验的计算机是:我工作的2 RedHat
,可能是从2000年末/ 2010年初开始的,我从Windows 7
计算机访问{{1} }};使用Terminal Rex IDE的Penguinet
手机/平板电脑“我安装系统”。在大多数Android
终端应用中,我无法获得Android
,vim
,甚至less
,但我得到vi
。当我将more
与vagrant
一起使用,默认Git Bash
值为TERM
时,终端全部搞砸了,我经历了大部分相同的行为,但更糟。当我将msys
更改为TERM
或cygwin
时,情况会更好。
具有更理想行为的计算机(对我来说)是:我最新的笔记本电脑xterm
(是的,预装了Ubuntu 15.04
的电脑);在过去的几年里,我在Windows 8笔记本电脑上安装的任何Linux VM,但我只获得了最新版本,所以我不知道这种行为有多久了。我的Windows 8笔记本电脑上Linux
。当我使用鼠标滚动时,Git Bash
没有滚动回文件,而是通过空终端滚动,但这可能是因为Git Bash
/ vimrc
中的设置。当我退出lessrc
时,它仍然显示了我之前的所有行而不是文件。
大多数这些计算机都在使用Git Bash
,但是当我在最新的bash
计算机上安装和使用fish
时,我仍然遇到了更新的现象,即使我将其设为默认shell ,我不相信ubuntu
在技术上Git Bash
,尽管它可能是。我相信bash
应用在安装到系统时使用Terminal Rex
,但是当我使用其他终端应用检查bash
环境变量时,以及未安装系统的Terminal Rex,它会报告为SHELL
。
我对这些行为发生的原因感兴趣,但我对更多感兴趣的方式将其更改为更理想的行为。 有没有办法让sh
&较旧/功能较差的计算机上的vim
更像是新计算机上的行为吗?另外,有没有办法让less
滚动回文件而不是空白终端?
奖励:有没有办法让Git Bash
在新计算机上的行为更像more
?或者这只是less
和more
之间的区别?想一想,功能较少的计算机上的less
是否真的可以less
?
答案 0 :(得分:3)
所描述的行为是xterm风格的备用屏幕。有两种情况:
正常/备用屏幕大小相同:终端的可见部分忽略回滚区域。您可以使用鼠标查看回滚。如果在切换到备用屏幕时执行此操作,则可以看到当前(备用)屏幕旁边的回滚。在切换回之后,例如,当vim退出时,在整个回滚和当前(正常)屏幕中显示前面的行。两者之间没有标记。
最近在 What mechanism allows ViM to temporarily overwrite the entire console?
中讨论了普通/备用屏幕的某些方面 Unix上的大多数应用程序(以及Linux和BSD和......)都关注TERM
环境变量,它们(或ncurses之类的库)用于从TERM
中检索信息。 {3}}。原则上,可以为不同的应用程序单独设置TERM=vt100 vim foo.c
TERM=xterm less foo.c
以引发不同的行为(需要注意的是,某些应用程序(如vim)具有内置表来“修复”它们可以在没有警告的情况下应用的终端数据库)。例如,在POSIX shell(或类似bash)中运行,您可以键入此命令以使用两个不同的终端描述运行vim和更少:
if (version >= 17 || version == 0)
{
execlp("am", "am", "start", "--user", "0", "-n",
"com.android.browser/com.android.browser.BrowserActivity",
"-a", "android.intent.action.VIEW",
"-d", url, (char *)NULL);
}
else
{
execlp("am", "am", "start", "-n",
"com.android.browser/com.android.browser.BrowserActivity",
"-a", "android.intent.action.VIEW",
"-d", url, (char *)NULL);
}