当我运行'less'时,我的Cygwin终端出现了一些问题。 'less'工作正常,但是当我退出时,终端的所有屏幕缓冲区历史都会丢失。有什么建议吗?
我在WinXP上运行Cygwin。
答案 0 :(得分:2)
它与bash无关。正在删除的是终端仿真器显示的文本。
与其他全屏程序一样,less
在启动时保存终端状态(包括任何显示的文本和光标位置),并在退出时恢复。
它通过打印由smcup
和rmcup
terminfo条目定义的字符串来完成此操作。
这些取决于$TERM
环境变量的值。
如果这些字符串未打印,或者它们被配置为无法保存和恢复终端状态的字符串,则less
将替换屏幕上显示的内容通过您要查看的文件的内容,然后不恢复它。
使用-X
选项less
(按照the answer you accepted的建议告诉less
而不是打印smcup
和{ {1}}字符串 - 我希望这会导致您尝试解决的问题。
如果要保存和恢复终端状态(这意味着退出时rmcup
生成的输出将消失),您需要确保将less
环境变量设置为具有适当$TERM
和smcup
设置的内容。我发现将其设置为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的整个故事。
也许它可以帮助某人。我花了很多时间来解决这个问题。虽然解决方案(或更确切地说是解决方法)是如此愚蠢:)