vim 和 tmux 中的背景颜色不匹配

The*_*ird 7 colors vim terminal tmux iterm

当我运行 tmux 时,我无法在 vim 中使用所有颜色。我相信 TERM 变量或 256colors 存在某种问题,但我已经做了我能在网上找到的所有东西,使 256 色在 vim、tmux 和 iTerm 中工作,但没有任何东西可以修复它。这是一个小问题,但它严重困扰着我。

这是通过 iTerm 在 vi​​m 中的示例代码文件: 术语

这是通过 tmux 和 iTerm 在 vi​​m 中的同一个文件: 在此处输入图片说明

注意背景颜色看起来有点不匹配,只有在那里编写代码时。为什么会这样?

我有set t_Co=256我的vimrc,我的iTerm终端设置为xterm-256color,我有set -g default-terminal xterm-256color我的tmux.conf,我有:

if [ -e /usr/share/terminfo/x/xterm-256color ]; then
     export TERM='xterm-256color'
else
     export TERM='xterm-color'
fi
Run Code Online (Sandbox Code Playgroud)

在我的.profile. 这个确切的问题在我工作的基于 Ubuntu 的机器上被复制,我在那里使用所有相同的配置文件。这至少将问题隔离为与 OS/iTerm 无关。

小智 8

一个老问题,但它在我的谷歌搜索中排名很高,但没有帮助我。这就是最终为我解决的问题

.tmux.conf 中

set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
Run Code Online (Sandbox Code Playgroud)

.vimrc 中

if exists('+termguicolors')
  let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
  let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
  set termguicolors
endif
Run Code Online (Sandbox Code Playgroud)

  • +1我搜索了整个网络,花了很多时间试图解决这个问题,但在我找到这个答案之前它不起作用。我的问题是,在 xterm-256color 上设置 TERM 变量后,我在 vim 中获得了颜色,但它们不是正确的颜色。就好像终端顶部有一个粉红色的覆盖层,所有东西都变成了粉红色!对我来说,**.tmux.conf** 文件的第二行改变了游戏规则。我只是添加了 `set -gaterminal-overrides ",*256col*:Tc"` 并且它神奇地工作了。多谢! (3认同)

小智 7

将下面的行添加到 .tmux.conf

set -g default-terminal "screen-256color"
Run Code Online (Sandbox Code Playgroud)

您仍然需要将下面的行添加到 .vimrc

set term=screen-256color
Run Code Online (Sandbox Code Playgroud)

最后,需要将别名添加到 .bashrc

alias tmux='tmux -2'
Run Code Online (Sandbox Code Playgroud)


Ing*_*kat 3

在 tmux 内部,您需要设置TERM=screen-256color. 可能是这样的这只适用于 tmux 内部,但不适用于tmux.conf. 检查您是否无条件地覆盖该TERM值,例如您的值.bashrc,或者当您在 tmux 中打开 shell 时获取的任何内容。