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

时间:2015-07-25 16:57:58

标签: android linux shell pagination git-bash

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

基本上,每当我在某些计算机上使用vimless时,先前的终端内容都会被当前文件的缓冲区覆盖(我认为)。如果我使用滚动条向后滚动,而不是当前程序的命令,我可以看到之前的终端内容,但是前面的一些行已被当前程序写入。似乎有很多行通过缓冲区(我认为),例如,vim,是多少行的终端被覆盖了。当我退出vim / less时,这些行仍会被覆盖,但它们会显示在历史记录中,当我按up以“回溯”历史记录时。

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

每当我使用more时,无论我使用什么计算机,前一种现象都会发生,但我并没有那么多地使用more,因为我更喜欢less ,所以我没有测试它的极限。

我经历过前一种现象的计算机/虚拟终端似乎是较旧的计算机和/或具有较少功能和规格的计算机,这很有意义,因为大多数人可能会想要后者,但它可能更难完成并且需要更强大的处理能力和记忆力。

具有以前经验的计算机是:我工作的2 RedHat,可能是从2000年末/ 2010年初开始的,我从Windows 7计算机访问{{1} }};使用Terminal Rex IDE的Penguinet手机/平板电脑“我安装系统”。在大多数Android终端应用中,我无法获得Androidvim,甚至less,但我得到vi。当我将morevagrant一起使用,默认Git Bash值为TERM时,终端全部搞砸了,我经历了大部分相同的行为,但更糟。当我将msys更改为TERMcygwin时,情况会更好。

具有更理想行为的计算机(对我来说)是:我最新的笔记本电脑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?或者这只是lessmore之间的区别?想一想,功能较少的计算机上的less是否真的可以less

1 个答案:

答案 0 :(得分:3)

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

  • 当使用 时,终端会在您运行vim等全屏程序时切换到 alternate 屏幕。
  • 使用 时,终端会在运行全屏程序时继续正常屏幕。

正常/备用屏幕大小相同:终端的可见部分忽略回滚区域。您可以使用鼠标查看回滚。如果在切换到备用屏幕时执行此操作,则可以看到当前(备用)屏幕旁边的回滚。在切换回之后,例如,当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);
}