当前位置: 首页 > 面试题库 >

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

宇文卓
2023-03-14
问题内容

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

基本上,只要我使用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


问题答案:

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

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

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

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

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

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


 类似资料:
  • 问题内容: 如果我有以下代码: 我会得到的输出 我想做的是代替打印换行符,而是要替换先前的值,并在同一行上用新值覆盖它。 问题答案: 一种方法是使用回车字符返回到行的开头而不前进到下一行: 打印语句末尾的逗号告诉它不要转到下一行。最后的打印语句前进到下一行,因此你的提示不会覆盖你的最终输出。

  • 我正在尝试对涉及DStreams的Spark Streaming应用程序执行一些单元测试。 我发现下面这套很有用:StreamingSuiteBase。它包含一个名为testOperation的方法,您可以向该方法传递一个输入、一个要测试的操作和一个预期的输出。它将验证您的预期输出是否与实际输出相匹配。 我面临的问题是,在相等验证期间,我确实得到了完全相同的对象,但包装成不同的集合: 预期:列表(

  • 问题内容: 是否有可能覆盖最后的输出,所以我可以例如可视化数组中的更改或创建一个进度栏? 例如,如果我有这个课: 我必须怎么做才能创建一个简单的进度条,而不是显示在10行中? 问题答案: 这可以在我的特定控制台(Windows)上使用,但不是很便携… 还有课程,但据我所知实际上并没有买多少钱……

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 问题内容: 我想要一个目录,但是我不想覆盖任何现有文件,即使它们比复制的文件还旧。我想做到完全非交互式,因为这将是Crontab Bash脚本的一部分。有任何想法吗? 问题答案: 从手册页中获取: 例:

  • 问题内容: 如果你有 有没有一种方法可以覆盖样式表中的内容以使其显示? 最好使用与此类似的东西: 问题答案: 首先让我说, 通常 可以 替换内联样式: [W3规范中对此行为进行了描述,其中声明声明不会改变特异性,而是 优先 于“正常”声明。 话虽这么说,但当冲突的规则都具有该标志时,特定性就决定要应用一个内联规则-这意味着对于OP的情况,无法覆盖 inline。