[英]Terminal retains bg color after closing vim - using color scheme and putty-256color term
关闭使用颜色格式的应用程序(例如vim)后,终端会保留一些属性,如背景颜色。 只有在使用putty-256color
或screen
术语时才会发生这种情况。 我在RHEL 6.5和Ubuntu 14.04LTS中观察到类似的行为。
唯一的解决方案是reset
终端。
当使用xterm-256color
term(也是w / Putty终端仿真器)时,问题不存在。
是否有解决方案/解释为什么会发生这种情况,以及在Putty终端仿真器下使用xterm时我可能会失去什么,即实际使用putty-256color
或xterm-256color
术语会更好吗?
问题描述提到“终端保留了一些属性,如背景颜色”。 这可能是指PuTTY支持的背面颜色擦除功能。 当屏幕被擦除时,终端将用当前背景颜色填充背景(在擦除部分上)。
但是,乍一看,备用屏幕功能似乎并不相关。 我可以使用PuTTY和vim使用“早晨”colorscheme产生问题,无论是否禁用PuTTY的替代屏幕功能。 退出时,屏幕具有与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
代码),那么你会看到这个问题。
进一步阅读:
解决这个问题的方法是在GNU屏幕下启用altscreen
。 因此屏幕术语的行为与常规xterm相同 - 全屏应用程序与输出的其余部分具有单独的框架/屏幕。
然而,重要的是要设置正确的TERM
以便应用知道如何在常规和替代屏幕之间切换。
有关如何解决此问题的一些灵感,请参阅此响应:
重点是包括
altscreen on
在.screenrc文件中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.