环境:
- 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
答案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"