2

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

我在 WinXP 上运行 Cygwin。

4

3 回答 3

2

尝试运行 asless -X或将LESS环境变量设置为-X.

于 2011-07-22T22:19:58.540 回答
2

它与 bash 无关。被删除的是终端模拟器显示的文本。

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

它通过打印由smcuprmcup terminfo条目定义的字符串来做到这一点。

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

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

使用-X选项 to less(正如您接受的答案所建议的那样,告诉less 不要打印smcupandrmcup字符串 - 我希望这会导致您试图解决的问题。

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

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

Dawid Ferenczy 的回答暗示了问题的另一个可能原因。这不是我曾经遇到过的事情。

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

(最初的海报已经有大约 2.5 年没有出现在该网站上,所以我们不应该期待任何反馈,但这些答案可能对其他人有用。)

于 2013-12-31T02:04:40.617 回答
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等后屏幕缓冲区会被清除。无论Cygwin是在ConEMu内部执行还是在普通cmd.exe中执行。使终端窗口变小解决了这个问题。62 行的窗口高度对我来说似乎很好。此外,对于一些更大的高度值,LESS 进程有时会崩溃。

看来这是Cygwin的问题。

你可以在这里阅读整个故事。

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

于 2013-12-31T01:48:24.843 回答