关闭使用颜色格式化(例如vim)的应用程序后,终端保留一些属性,如背景颜色。这只发生在使用putty-256color
或screen
项时。我在RHEL 6.5和Ubuntu 14.04LTS中观察到类似的行为。
唯一的解决办法是reset
端子。
当使用xterm-256color
项(也w/Putty终端模拟器)时,问题不存在。
是否有解决方案/解释为什么会发生这种情况,以及在Putty终端模拟器下使用xterm时我可能会失去什么,即实际使用putty-256color
或xterm-256color
术语是否更好?
问题描述提到"终端保留了一些属性,比如背景颜色"。这可能指的是PuTTY支持的背面颜色擦除功能。当屏幕被擦除时,终端将用当前背景色填充背景(在被擦除的部分上)。
乍一看,交替屏幕功能似乎没有关系,然而。在使用PuTTY和vim使用"早晨"配色方案时,无论是否禁用了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[?25hr
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
代码),那么您将看到这个问题。
进一步阅读:
- 为什么运行vi时屏幕不清?(xterm FAQ)
- 我的终端显示一些未着色的空间
- XTerm控制序列
解决这个问题的方法是在GNU屏幕下启用altscreen
。因此,屏幕项的行为就像普通的xterm一样——全屏应用程序与其他输出有一个单独的帧/屏幕。
有一个正确的TERM
设置是很重要的,这样应用程序就知道如何在常规屏幕和alt屏幕之间切换。
来源:当在gnu屏幕中使用vim或less时,退出vim或less会留下挥之不去的印记
关于如何解决这个问题,请参阅以下回复:
要点是包含
altscreen on
在你的。screenrc文件。
https://stackoverflow.com/a/37863269/5153834