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

时间:2011-07-22 20:18:03

标签: bash cygwin less-unix

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

我在WinXP上运行Cygwin。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

如果这些字符串打印,或者它们被配置为无法保存和恢复终端状态的字符串,则less将替换屏幕上显示的内容通过您要查看的文件的内容,然后不恢复它。

使用-X选项less(按照the answer you accepted的建议告诉less 而不是打印smcup和{ {1}}字符串 - 我希望这会导致您尝试解决的问题。

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

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

Dawid Ferenczy's answer提出了另一个可能导致问题的原因;这不是我遇到的事情。

(关于保存和恢复终端状态是否是一件好事,意见分歧很大。This blog entry是由一个非常不喜欢它的人编写的。就个人而言,我喜欢它;如果我想运行全屏命令当我正在做其他事情时保持其输出可见,我只是在另一个窗口中启动它。)

(原始海报在大约2年半时间内没有出现在网站上,所以我们不应该期待任何反馈,但这些答案可能对其他人有用。)

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

似乎这是Cygwin的一个问题。

您可以阅读here的整个故事。

也许它可以帮助某人。我花了很多时间来解决这个问题。虽然解决方案(或更确切地说是解决方法)是如此愚蠢:)