2011-07-22 40 views

回答

0

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

1

我在我的新笔记本电脑上遇到了同样的问题。我一直在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等后屏幕缓冲区会被清除。如果在ConEMu或纯cmd.exe中执行Cygwin,则无关紧要。 缩小终端窗口解决了问题。 62行窗口高度对我来说似乎很好。另外,对于一些更高的高度值,LESS过程有时会崩溃。

看来这是Cygwin的问题。

整个故事你可以阅读here

也许它可以帮助别人。我花了很多时间来解决这个问题。虽然解决方案(或更好的解决方法)是这样该死的愚蠢:)

2

它与bash无关。正在擦除的是终端仿真器显示的文本。

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

它通过打印由smcuprmcupterminfo条目定义的字符串来完成此操作。

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

如果这些字符串打印,或者如果他们配置的东西,不保存和恢复您的终端状态,然后less将取代无论是在屏幕上用你想要的文件的内容查看,然后不恢复它。

使用-X选项less(由the answer you accepted的建议告诉less打印smcuprmcup琴弦 - 我会希望引起你试图解决的问题。

如果你想保存和恢复您的终端状态(这意味着,当你退出由less产生的输出就会消失),你需要确保你的$TERM环境变量设置为一些适当smcuprmcup设置。我发现它设置为xterm通常工作。

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

Dawid Ferenczy's answer提出了该问题的另一个可能的原因;这不是我曾经遇到过的事情。我个人喜欢它;如果我想要运行一个全屏命令并保持它的状态,输出可见的,而我在做别的事情,我只是启动它在另一个窗口。)

(楼主一直没有在网站上大约两年半的时间,所以我们不应该指望任何反馈,但这些答案很可能是有用的人。)