为什么 Vim 颜色在 tmux 内部和外部看起来不同?

为什么 Vim 颜色在 tmux 内部和外部看起来不同?

环境:

  • Fedora 25 (4.9.12-200.fc25.x86_64)
  • GNOME 终端 3.22.1 使用 VTE 版本 0.46.1 +GNUTLS
  • VIM - Vi IMproved 8.0(2016年9月12日,2017年2月22日16:26:11编译)
  • 多路复用器2.2

我最近开始使用 tmux,并观察到 ​​Vim 中的颜色会根据我是在 tmux 内部还是外部运行而变化。下面是查看 Git diff 时 Vim 在 tmux 外部(左)和内部(右)的屏幕截图:

在此输入图像描述

我的TERM变量是

  • 外部 tmux:xterm-256color
  • tmux 内部:screen-256color

Vim 按预期报告这些终端类型(通过:set term?):

  • 外部 tmux:term=xterm-256color
  • tmux 内部:term=screen-256color

Vim 还报告两个实例都在 256 色模式下运行(通过:set t_Co?):

  • 外部 tmux:t_Co=256
  • tmux 内部:t_Co=256

关于让 Vim 在 tmux 中以 256 色模式运行有很多类似的问题(我发现的最好的答案是这里),但考虑到上述信息,我认为这不是我的问题。

如果我运行 Vim 并将终端类型设置为screen-256color

$ TERM=screen-256color vim

xterm-256color因此,这让我相信,终端功能之间存在一些差异screen-256color,导致了颜色的差异。这就引出了标题中提出的问题:终端功能中具体是什么导致 Vim 颜色不同? 我看到了 tmux 内部和外部运行之间的差异:set termcap,但我很好奇哪些变量实际上导致了行为差异。

独立于上一个问题,在 tmux 内部或外部运行时是否可以使 Vim 颜色保持一致? 我尝试过的一些事情包括:

  • 显式地将 tmux 使用的默认终端设置~/.tmux.conf为各种值(有些值违反了 tmux 的建议)常问问题):
    设置-g 默认终端“screen-256color”
    设置 -g 默认终端“xterm-256color”
    设置 -g 默认终端“screen.xterm-256color”
    设置-g默认终端“tmux-256color”
  • tmux -2使用启动 tmux

在所有情况下,Vim 继续在 tmux 内显示不同的颜色。

答案1

我之前也遇到过类似的问题。 Vim 中蓝色的注释很难阅读。在.tmux.conf我这样设置:

set -g default-terminal "screen-256color"

并在.vimrc

set background=dark

现在它看起来如下并且可以在 Gnome Terminal 和 Cygwin 中运行: 在此输入图像描述

答案2

tmux不支持 terminfo 功能bce(背景颜色擦除),它vim进行检查,以决定是否使用其“默认颜色”方案。

这个特性tmux已经被提到过几次了——

答案3

以下设置~/.tmux.conf对我有用:

# file ~/.tmux.conf
# ...

set -g default-terminal "xterm-256color"

# make colors inside tmux look the same as outside of tmux
# see https://github.com/tmux/tmux/issues/696
# see https://stackoverflow.com/a/41786092
set-option -ga terminal-overrides ",xterm-256color:Tc"

# ...

答案4

对我来说,我必须添加以下内容.tmux.conf才能获取 RGB 颜色和排除色差。

set -ag terminal-overrides ",xterm-256color:RGB"
set  -g default-terminal "tmux-256color"

相关内容