【问题标题】:Cygwin 'less' command makes bash forget screen buffer historyCygwin 'less' 命令使 bash 忘记屏幕缓冲区历史记录
【发布时间】:2011-07-22 20:18:03
【问题描述】:

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

我在 WinXP 上运行 Cygwin。

【问题讨论】:

    标签: bash cygwin less-unix


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      如果这些字符串没有打印出来,或者如果它们被配置为不能保存和恢复终端状态的东西,那么less 将用您要查看的文件的内容,然后不恢复它。

      less 使用-X 选项(正如the answer you accepted 所建议的那样,告诉less 打印smcuprmcup 字符串——我希望这样导致你试图解决的问题。

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

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

      Dawid Ferenczy's answer 提出了另一个可能的问题原因;这不是我自己遇到过的。

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

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

      【讨论】:

        【解决方案3】:

        我的新笔记本电脑也遇到了同样的问题。我在 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的问题。

        你可以阅读整个故事here

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

        【讨论】:

          猜你喜欢
          • 2018-07-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 2013-08-17
          • 2019-10-22
          • 1970-01-01
          相关资源
          最近更新 更多