Cygwin'less'命令使bash忘记屏幕缓冲区历史记录
我在运行'less'时遇到了一些Cygwin终端问题。 'less'工作正常,但是当我离开它时,终端的所有屏幕缓冲区历史都会丢失。有什么建议么?Cygwin'less'命令使bash忘记屏幕缓冲区历史记录
我在WinXP上运行Cygwin。
尝试以less -X
运行,或将LESS
环境变量设置为-X
。
我在我的新笔记本电脑上遇到了同样的问题。我一直在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。
也许它可以帮助别人。我花了很多时间来解决这个问题。虽然解决方案(或更好的解决方法)是这样该死的愚蠢:)
它与bash无关。正在擦除的是终端仿真器显示的文本。
与其他全屏程序一样,less
在启动时保存终端状态(包括任何显示的文本和光标位置),并在退出时将其恢复。
它通过打印由smcup
和rmcup
terminfo条目定义的字符串来完成此操作。
这些取决于$TERM
环境变量的值。
如果这些字符串不打印,或者如果他们配置的东西,不保存和恢复您的终端状态,然后less
将取代无论是在屏幕上用你想要的文件的内容查看,然后不恢复它。
使用-X
选项less
(由the answer you accepted的建议告诉less
不打印smcup
和rmcup
琴弦 - 我会希望引起你试图解决的问题。
如果你想保存和恢复您的终端状态(这意味着,当你退出由less
产生的输出就会消失),你需要确保你的$TERM
环境变量设置为一些适当smcup
和rmcup
设置。我发现它设置为xterm
通常工作。
如果您有雄心,可以创建自己的terminfo条目并使用tic
命令将其“编译”为系统使用的二进制格式。
Dawid Ferenczy's answer提出了该问题的另一个可能的原因;这不是我曾经遇到过的事情。我个人喜欢它;如果我想要运行一个全屏命令并保持它的状态,输出可见的,而我在做别的事情,我只是启动它在另一个窗口。)
(楼主一直没有在网站上大约两年半的时间,所以我们不应该指望任何反馈,但这些答案很可能是有用的人。)