Cygwin';减去';命令使bash忘记屏幕缓冲区历史记录

Cygwin';减去';命令使bash忘记屏幕缓冲区历史记录,bash,cygwin,less-unix,Bash,Cygwin,Less Unix,当我运行“less”时,我的Cygwin终端出现了一些问题“less”工作正常,但当我退出时,终端的所有屏幕缓冲历史记录都丢失了。有什么建议吗 我正在WinXP上运行Cygwin。尝试以less-X的身份运行,或者将less环境变量设置为-X我的新笔记本电脑也有同样的问题。我已经在64位Windows7上使用Cygwin很长时间了,我从未遇到过这个问题。但在新的fresh系统(也是64位Windows 7)上,同样配置的Cygwin在我退出时清除了屏幕缓冲区,MAN、VIM等,这让我非常烦恼。因

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


我正在WinXP上运行Cygwin。

尝试以
less-X
的身份运行,或者将
less
环境变量设置为
-X
我的新笔记本电脑也有同样的问题。我已经在64位Windows7上使用Cygwin很长时间了,我从未遇到过这个问题。但在新的fresh系统(也是64位Windows 7)上,同样配置的Cygwin在我退出时清除了屏幕缓冲区,MAN、VIM等,这让我非常烦恼。因为我在ConEmu终端模拟器中使用Cygwin,所以我怀疑ConEmu。在对所有可能的原因(环境变量、配置、软件版本等)进行了长时间的比较之后,我与ConEmu的作者进行了一次对话(他对自由软件的支持堪称典范!)。我们终于找到了原因

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

看来这是Cygwin的问题

整个故事你都能读到


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

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

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

它通过打印由
smcup
rmcup
条目定义的字符串来实现

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

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

使用
-X
选项
less
(建议告诉
less
不要打印
smcup
rmcup
字符串,我希望这会导致您试图解决的问题

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

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

提出了问题的另一个可能原因;这不是我遇到过的问题

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

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