当我运行'less'时,我的Cygwin终端有一些问题。"less"可以正常工作,但是当我退出它时,终端的所有屏幕缓冲历史记录都丢失了。有什么建议吗?
尝试以less -X
运行,或者将LESS
环境变量设置为-X
这与bash无关。被擦除的是终端模拟器显示的文本。
与其他全屏程序一样,less
在启动时保存终端状态(包括所有显示的文本和光标位置),并在退出时恢复。
它通过打印smcup
和rmcup
终端项定义的字符串来实现这一点。
这些取决于$TERM
环境变量的值。
如果这些字符串没有打印,或者如果它们被配置为不保存和恢复您的终端状态,那么less
将用您想要查看的文件内容替换屏幕上的任何内容,然后不恢复它。
使用-X
选项到less
(正如您接受的答案所建议的那样)告诉less
不打印smcup
和rmcup
字符串—我希望这会导致您试图解决的问题。
如果您想保存和恢复您的终端状态(这意味着less
产生的输出将在您退出时消失),您需要确保您的$TERM
环境变量设置为具有适当smcup
和rmcup
设置的东西。我发现将其设置为xterm
通常有效。
如果您有野心,您可以创建自己的termino条目,并使用tic
命令将其"编译"为系统使用的二进制格式。
(最初的海报已经有两年半没有在这个网站上了,所以我们不应该期待任何反馈,但是这些答案可能对其他人有用。)
我的新笔记本电脑也有同样的问题。我一直在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的问题。
整个故事你可以在这里阅读。
也许它可以帮助别人。我花了很多时间才解出来。而解决方案(或者更确切地说是变通方案)是如此该死的愚蠢:)