vim - 终端在关闭 vim 后保留 bg 颜色 - 使用配色方案和 putty-256color 术语

标签 vim putty xterm 256color

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

唯一的解决办法是reset终点站。

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

是否有解决方案/解释为什么会发生这种情况以及在 Putty 终端仿真器下使用 xterm 时我会丢失什么,即实际使用 putty-256color 会更好吗?或 xterm-256color学期?

最佳答案

问题描述提到“终端保留了一些属性,如背景颜色”。这可能是指 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发送sgr0 ( \E[0m ) 就在将背景设置为灰色 ( \E[38;5;130m ) 之后。这样做应该重置颜色。但事实并非如此。在 vim 发送 rmcup 中的两部分转义序列之前,还有其他几个操作。
\E[2J
\E[?47l

这应该清除(替代)屏幕并切换回正常屏幕。 xterm中对应的能力是
\E[?1049l

它结合了两个操作。看到这一点,PuTTY 中有两个问题共同产生了问题:
  • 颜色未按预期重置,并且
  • 颜色应用于设置普通屏幕上的背景。

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

    进一步阅读:
  • Why doesn't the screen clear when running vi? (xterm 常见问题解答)
  • My terminal shows some uncolored spaces
  • XTerm Control Sequences
  • 关于vim - 终端在关闭 vim 后保留 bg 颜色 - 使用配色方案和 putty-256color 术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24613237/

    相关文章:

    vim - 当没有从命令行打开文件时,如何在 vim 中调用插件?

    vim - 禁用VIM中的警告?

    vim - 如何在 Vim 中插入真正的制表符?

    c# - 在 C# 中使用 SSH.NET 执行多个依赖的 SSH 命令

    bash - 行尾的 ANSI 转义代码奇怪行为

    c - X11,使用 XSendEvent(3) 发送事件

    python - IPython 5.0 和控制台中的键绑定(bind)

    c - vim 自定义c语法折叠

    sftp - 将文件传输至 session /从 session 传输文件 我已使用 PuTTY 登录

    linux - 将所有文件和文件夹从 html/文件夹移动到 html/使用 linux 命令