Cygwin 'less'命令使 bash 忘记屏幕缓冲区历史记录



当我运行'less'时,我的Cygwin终端有一些问题。"less"可以正常工作,但是当我退出它时,终端的所有屏幕缓冲历史记录都丢失了。有什么建议吗?

尝试以less -X运行,或者将LESS环境变量设置为-X

这与bash无关。被擦除的是终端模拟器显示的文本。

与其他全屏程序一样,less在启动时保存终端状态(包括所有显示的文本和光标位置),并在退出时恢复。

它通过打印smcuprmcup终端项定义的字符串来实现这一点。

这些取决于$TERM环境变量的值。

如果这些字符串没有打印,或者如果它们被配置为不保存和恢复您的终端状态,那么less将用您想要查看的文件内容替换屏幕上的任何内容,然后不恢复它。

使用-X选项到less(正如您接受的答案所建议的那样)告诉less 打印smcuprmcup字符串—我希望这会导致您试图解决的问题。

如果您想保存和恢复您的终端状态(这意味着less产生的输出将在您退出时消失),您需要确保您的$TERM环境变量设置为具有适当smcuprmcup设置的东西。我发现将其设置为xterm通常有效。

如果您有野心,您可以创建自己的termino条目,并使用tic命令将其"编译"为系统使用的二进制格式。

david Ferenczy的回答提出了这个问题的另一个可能的原因;这是我自己从来没有遇到过的。 关于保存和恢复终端状态是否是一件好事,意见分歧很大。这篇博文是由一个非常不喜欢它的人写的。就我个人而言,我喜欢它;如果我想运行一个全屏命令,并在执行其他操作时保持其输出可见,我只需在另一个窗口中启动它。

(最初的海报已经有两年半没有在这个网站上了,所以我们不应该期待任何反馈,但是这些答案可能对其他人有用。)

我的新笔记本电脑也有同样的问题。我一直在64位Windows 7上使用Cygwin很长一段时间,我从来没有遇到过这个问题。但在新的新鲜系统(也是64位Windows 7)相同的Cygwin与相同的配置清除屏幕缓冲区每当我退出LESS, MAN, VIM等。这让我很困扰。因为我在ConEmu终端模拟器中使用Cygwin,所以我怀疑是ConEmu。在花了很长时间比较所有可能的原因(环境变量、配置、软件版本等)之后,我与ConEmu的作者进行了一次对话(他真的很棒,是自由软件的典范支持!)我们终于找到了原因。

唯一的区别(或少数区别之一)是显示尺寸。旧款笔记本电脑的屏幕分辨率为1366 x 768像素,而新款笔记本电脑的屏幕分辨率为1920 x 1080。我要用整个屏幕作为终端窗口。这真的很奇怪,但是如果终端窗口高度大于cca 62行,退出LESS, VIM等后,屏幕缓冲区将被清除。无论Cygwin是在ConEMu中执行还是在普通的cmd.exe中执行。使终端窗口变小解决了这个问题。 62行的窗口高度似乎对我来说很好。此外,如果高度值较大,LESS进程有时会崩溃。

这似乎是Cygwin的问题。

整个故事你可以在这里阅读。

也许它可以帮助别人。我花了很多时间才解出来。而解决方案(或者更确切地说是变通方案)是如此该死的愚蠢:)

最新更新