【问题标题】:Terminal retains bg color after closing vim - using color scheme and putty-256color term关闭 vim 后终端保留 bg 颜色 - 使用配色方案和 putty-256color 术语
【发布时间】:2014-08-28 02:11:57
【问题描述】:

关闭使用颜色格式(例如 vim)的应用程序后,终端会保留一些属性,例如背景颜色。 仅当使用 putty-256colorscreen 术语时才会发生这种情况。 我在 RHEL 6.5 和 Ubuntu 14.04LTS 中观察到类似的行为。

唯一的解决办法是reset终端。

当使用 xterm-256color 术语(也带有 Putty 终端仿真器)时,问题不存在。

是否有解决方案/解释为什么会发生这种情况以及在 Putty 终端模拟器下使用 xterm 时我可能会失去什么,即实际使用 putty-256colorxterm-256color 术语会更好吗?

【问题讨论】:

  • 您看到的问题是 TERM 变量设置不正确。 vim 使用这个变量来确定它将如何绘制到屏幕上。如果设置不正确,vim 无法撤消它用来绘制的设置,因为底层终端不理解它使用的代码。
  • 不确定设置不正确是什么意思。我在所有情况下都检查了$TERM 的值,它应该是这样的。
  • 我相信这是由于在常规非屏幕终端中发生的一些重绘 - 应用程序关闭后,整个“框架”被刷新,并且没有前一个 (CLI) 应用程序的痕迹,并且在执行启动此应用程序的命令的行执行后,您将立即返回到提示符。在屏幕上没有刷新 - 当你关闭一个应用程序时,你会在应用程序之后立即进入提示,该应用程序在上一行的缓冲区中仍然可见。有没有办法在屏幕术语中导致帧/屏幕刷新?

标签: vim putty xterm 256color


【解决方案1】:

问题描述中提到“终端保留了一些属性,如背景颜色”。这可能是指 PuTTY 支持的背面颜色擦除功能。当屏幕被擦除时,终端会用当前的背景颜色填充背景(在被擦除的部分)。

然而,乍一看,备用屏幕功能似乎并不相关。在禁用或不禁用 PuTTY 的备用屏幕功能的情况下,我可以使用 PuTTY 和 vim 使用“早上”颜色方案产生问题。退出时,屏幕具有与 vim 相同的灰色背景。如果我按照

tput sgr0

然后该命令重置颜色,以便使用终端的默认背景颜色写入新文本(如预期的那样)。

查看 vim 在退出时发送的转义序列并没有发现异常——在终端描述中(使用unmap 使它们以可读的形式出现):

\n
\E[1m
\E[38;5;130mendif
\E[0m
\E[30m  
\E[47m  
\E[24;63H1,1
\E[11CTop   
\E[1;1H  
\E[?25h  
\E[?25l
\E[24;63H
\E[K
\E[24;1H:
\E[?25hq 
\E[?25l 
\E[?25h\r
\E[?25l  
\E[24;1H
\E[K
\E[24;1H
\E[?1l   
\E>
\E[?25h
\E[2J   
\E[?47l

也就是说,vim 在将背景设置为灰色 (\E[38;5;130m) 之后就发送 sgr0 (\E[0m)。这样做应该重置颜色。但事实并非如此。在vim发送rmcup中的两部分转义序列之前还有其他几个操作

\E[2J
\E[?47l

这应该清除(备用)屏幕并切换回正常屏幕。 xterm中对应的能力是

\E[?1049l

结合了这两种操作。看到这里,PuTTY 中有两个问题共同产生了问题:

  • 颜色未按预期重置,并且
  • 颜色应用于设置普通屏幕的背景。

它恰好适用于 TERM=xterm,使用 1049 代码,因为 PuTTY 的开发人员显然测试了 。例如,如果恢复正常屏幕的颜色(但不使用 47 代码),那么您会看到这个问题。

进一步阅读:

【讨论】:

    【解决方案2】:

    请参阅此回复以获取有关如何解决此问题的一些灵感:

    重点是包括

    altscreen on
    

    在您的 .screenrc 文件中。

    https://stackoverflow.com/a/37863269/5153834

    【讨论】:

      【解决方案3】:

      解决方案是在 GNU 屏幕下启用altscreen。因此,屏幕术语的行为就像常规 xterm 一样 - 全屏应用程序具有与输出的其余部分分开的帧/屏幕。

      重要的是,设置正确的TERM 以便应用知道如何在常规屏幕和替代屏幕之间切换。

      来源:When using vim or less in gnu screen, quitting vim or less leaves a lingering imprint

      【讨论】:

      • 似乎这仍然不能解决 RHEL 6.5 的问题。即使 vim 在常规屏幕和 altscreen 之间正确切换(猜想这意味着 TERM 是正确的),vim 的格式在 vim 关闭后仍然存在。使用相同的配置,这在 Ubuntu 14.04LTS 上完美运行。
      • 还有一个观察 - 当使用 :q 退出 vim 时会发生这种情况。以:wq 关闭时不会发生这种情况。
      猜你喜欢
      • 2015-10-02
      • 2022-01-04
      • 2015-04-21
      • 2017-08-08
      • 1970-01-01
      • 2018-08-30
      • 2015-10-05
      • 2011-11-28
      • 1970-01-01
      相关资源
      最近更新 更多