在 tmux 模式下丢失 vim 颜色方案

Posted

技术标签:

【中文标题】在 tmux 模式下丢失 vim 颜色方案【英文标题】:lose vim colorscheme in tmux mode 【发布时间】:2012-04-26 20:39:59 【问题描述】:

我正在运行 iterm2,当我处于 tmux 模式时,我在 vim 中设置的颜色方案不显示。只有我在 iterm 中设置的配色方案。如果我从 shell 运行 vim,colorscheme 显示正确 - 只有当我处于 tmux 模式时。

我尝试在 vim 中设置 :colorscheme molokai(参见下面的屏幕截图)并且它没有改变 - 同样,iterm2 的默认颜色方案仍然存在。

我是否缺少 iterm 或 tmux.conf 的某些设置?我的 dotfles 在 github 上。

【问题讨论】:

当你$ tmux -2时会发生什么? 就是这样。 -2 标志是什么? 它强制 tmux 使用 256 种颜色。 @romainl 有好事发生 :) 【参考方案1】:

我遇到了同样的问题。唯一不同的是我使用的是solarize,而不是molokai

为了解决这个问题,我在~/.bashrc中设置了一个别名:

alias tmux="TERM=screen-256color-bce tmux"

并在~/.tmux.conf 中设置default-terminal 选项:

set -g default-terminal "xterm"

最后,执行$ source ~/.bashrc 加载新别名。

【讨论】:

我用这个代替tmux -2,因为这更冗长。 就我个人而言,我不得不使用set -g default-terminal "screen-256color" 来工作,而不是在 OS X 上使用xterm,将其 sshed 到一个 Ubuntu 盒子中。我参考了这个网站:rhnh.net/2011/08/20/vim-and-tmux-on-osx 这里的别名没有意义:它向 tmux 假装它在 screen 或 tmux 内运行,但几乎从来没有这种情况。要告诉 tmux 假设它运行的终端支持 256 种颜色,请运行 tmux -2tmux -2 attach(每次将新会话或现有会话附加到终端时,tmux 都会决定)。一个合理的别名是alias tmux='tmux -2'。另请参阅tmux, TERM and 256 colours support 我在其他答案中读到(找不到参考资料),尽管我不确定,但强制使用 TERM 不是一个好习惯。由于tmux -2 选项和set -g default-terminal "screen-256color" 对我有用,这将是我的选择。不过还是谢谢! 如果.tmux.conf 设置似乎没有生效,请关闭所有 tmux 进程并重新启动。你可以只做set -g default-terminal "screen-256color" 而无需在.bashrc 中设置任何别名。我认为人们正在做环境变量别名之类的变通办法,因为他们在配置.tmux.conf 后并没有关闭所有 tmux 进程。【参考方案2】:

我尝试了上述所有解决方案,最终对我有用的是将以下几行放入.tmux.conf

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

【讨论】:

我正在通过 SSH 使用 tmux,即使我没有使用 xterm,只是使用常规 SSH,这对我也有用。 我没有通过 ssh 使用它,这是唯一对我有用的答案。 OSX 10.9.5 中的本地 iTerm 会话。 这对我有用(MacOS Mojave + iTerm2/Alacritty),谢谢 适用于 Ubuntu 20.04 确实,这是正确的解决方案,尤其是在 Ubuntu 20.04 上【参考方案3】:

正如@romainl 上面提到的,我需要通过添加-2 标志来强制tmux 使用256 色:

$ tmux -2

我在我的 bash_profile 中添加了alias tmux='tmux -2',所以,我不会忘记 :)

【讨论】:

实际上,这根本不是强制性的:我不使用-2,但我在 tmux 中的 Vim 中有 256 种颜色。 @romainl 如果 tmux 没有检测到您的终端具有 256 种颜色,这是很有必要的,这很常见。 @Gilles,Vim 没有检测到终端支持 256 色,因为 tmux 的默认 TERMscreen-2 不会改变 TERM 并且不会改变任何与 Vim 从其环境中获取的信息相关的颜色::echo &t_Co 仍然返回 8。有了它给出的信息,Vim 做了正确的事。唯一必须设置的是 1. 你的终端模拟器的 TERMxterm-256color 或类似 urxvt-unicode-256color 的等效值和 2. tmux 的默认 TERMset -g default-terminal "screen-256color" @romainl 大多数环境将TERM 设置为xterm,而不是xterm-256color,因此需要运行tmux -2(或TERM=xterm-256color tmux,或更改termcap 或其他完成方式同样的事情)。 @Gilles,问题是 -2 不会对 Vim 关于 256 色支持的行为产生任何影响,因为对 Vim 来说唯一重要的是你的 TERM 并且要设置为你的链条末端:在你的终端模拟器中。如果你通过 5 台主机 SSH 并且你的终端设置正确,在第 5 台主机上启动的 Vim 将看到你的 256 色 TERM 并采取相应的行动。如果你在链的任何一点使用 tmux,-2 将对 Vim 的行为产生零影响,因为它所看到的只是它的环境被限制为 8 种颜色,因为 tmux 的默认 TERM:screen,-2 或不。【参考方案4】:

我刚刚发现为什么我有很多困惑。我和这里的其他人一样,很难让默认终端设置生效。我记得我在后台有一个 tmux 会话。我重新连接了我的会话,关闭了我的进程,并关闭了所有 tmux 进程。下次我重新启动 tmux 时,.tmux.conf 中的默认终端设置开始生效。我不知道其他人是否也在这样做,但我建议在修改 .tmux.conf 文件之前关闭所有 tmux 进程。

我没有对.bashrc.bash_profile 进行任何修改,我的设置就可以在我的本地机器(带有iTerm2 的OSX 10.9.5)上运行。我所做的只是将行 set -g default-terminal "xterm-256color" 添加到 ~/.tmux.conf 并重新启动所有 tmux 进程。

我的远程设置(SSH 到 Ubuntu 14.04)以完全相同的方式工作,无需对 .bashrc 进行任何修改。我只是在远程机器上将set -g default-terminal "xterm-256color" 添加到~/.tmux.conf 并重新启动了所有远程tmux 进程。

您可以通过在 tmux 会话中执行 echo $TERM 来测试 Vim 看到的内容。它一直说 screen 作为值,直到我重新启动所有 tmux 进程,此时它按预期反映了 xterm-256color

希望对您有所帮助。

【讨论】:

自从这篇文章以来,我已经确认了更多的操作系统,关闭所有进程并在.tmux.conf 中设置default-terminal 选项到目前为止100% 的时间都有效。 我也是!如果这个答案更进一步,我会花更少的时间。【参考方案5】:

所以这有点陈旧,但值得一提的是,使用屏幕经常会破坏 Home 和 End 键。使用

export TERM="xterm-256color"

in 应该保留这些功能并允许配色方案(或电源线)正常工作。

【讨论】:

感谢您指出这一点。我不知道。从我目前看到的情况来看,它似乎仍然适用于 Debian derv。在我的辩护中,这篇文章是针对 OSX 的。 tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM="xterm-256color" in .bash_profile,然后将 iterm 设置为 xterm-256-color 为我工作。无需设置任何 tmux 配置。【参考方案6】:

我需要 vim 在 ubuntu 的终端和 cygwin/mintty 的 Windows 上使用 tmux 正确显示。我通过结合这样的答案来实现它。

在 .bashrc 中:

alias tmux="tmux -2"

在 .vimrc 中:

" use 256 colors in terminal
if !has("gui_running")
    set t_Co=256
    set term=screen-256color
endif

" fix cursor display in cygwin
if has("win32unix")
    let &t_ti.="\e[1 q"
    let &t_SI.="\e[5 q"
    let &t_EI.="\e[1 q"
    let &t_te.="\e[0 q"
endif

基于这个问题的答案,this Vim wiki page 和 this block cursor question

【讨论】:

我遇到了 mintty 的问题,添加 vim 配置为我解决了这个问题。我什至不需要使用tmux 别名。 @trigoman ,我也一样,我只需要更新 .vimrc。 我尝试了之前的所有建议。刚刚将 set t_Co=256 添加到 .vimrc 并已修复。我不需要创建 tmux 别名。【参考方案7】:

如果有人需要 24 位颜色支持:

Tmux 从 2.2 版开始支持 24 位颜色。如果您的终端支持 24 位颜色,请将您的终端添加到终端覆盖设置。例如,

set -ga terminal-overrides ",xterm-256color:Tc"

我的环境清单:

macOS Sierra 10.12.3 iTerm2 3.0.14(报告终端类型为xterm-256color) neovim 0.1.7(通过添加:xterm-256color.vimrc 启用 24 位颜色) tmux 2.3(将set -ga terminal-overrides ",xterm-256color:Tc" 添加到.tmux.conf

我不需要在.bashrc.zshrc 中添加其他内容。

希望这会有所帮助。

【讨论】:

唯一对我有用的东西。这到底是做什么的? 它支持真彩色。当前的建议已更改为 3.2 (set -as terminal-features ",xterm-256:RGB") github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour【参考方案8】:

我已经尝试了上面的所有说明,我发现最重要的是我必须在我的 .bashrc 文件中明确添加以下行。

export TERM=screen-256color

我不知道为什么 alias tmux="TERM=screen-256color-bce tmux" 不起作用。 我使用 Sierra 10.12.1。

【讨论】:

这对我有用。只是简单地导出 TERM。 +1【参考方案9】:

由于这是 Google 上的第一个结果,并且以上都没有帮助..想要发布此内容以便有人可能会发现它有帮助

.vimrc:

set background=dark
set t_Co=256

HTH

【讨论】:

已经测试了这两行,它们在我的 Vim 在 WSL-Windows10 上运行良好。 非常感谢。这适用于带有 gnome-terminal 的 Ubuntu 18 工作就像一个魅力! 这是在 RedHat 上使用 xterm 对我有用的唯一方法。谢谢!【参考方案10】:

只是不得不处理这个问题,虽然之前发布的所有答案都有帮助,但它们并没有解决我的问题。

我的问题已通过删除.vimrc 中的以下行得到解决:

set termguicolors

无论如何,这与另一条指令是多余的。

现在,在我的.tmux.conf 中的以前的anwsers 中找到以下行:

export TERM="screen-256color"

一切都美好而多彩。

【讨论】:

【参考方案11】:

在 .tmux.conf 中添加以下行对我来说适用于 macOS Sierra 10.12.6,

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

【讨论】:

这里也一样。感谢@waffl 找到此解决方案!【参考方案12】:

如果你发现自己和我的情况一样,以上都不起作用..试试这个:

.tmux.conf

set -g default-terminal "xterm"

在 bash 配置中(可能是 .bashrc.bash_profile):

alias tmux="tmux -2"

然后运行:

killall tmux

然后重新启动 tmux

【讨论】:

【参考方案13】:

如果您使用tmuxinatormux,则需要将这些添加到.bashrc.zshrc

alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'

这些强制在终端中使用 256 色。

然后tmuxtmuxinatormux 命令都将起作用。

【讨论】:

【参考方案14】:

我删除了set termguicolors 行,但它不起作用。 在.vimrc 中设置set notermguicolors 是可行的。

【讨论】:

【参考方案15】:

为了设置正确的颜色并消除 Ubuntu 和 Mac 中的渲染问题:

check this

【讨论】:

【参考方案16】:

从 tmux 手册页,添加如下标志:

tmux -2

-2 标志强制 tmux 在 256 色模式下运行。

这对我有用

【讨论】:

【参考方案17】:

在我的 .tmux.conf 中使用这两行对我有用,我正在使用带有 Alacritty 的 Ubuntu 20.04。

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

在 YodaEmbedding 提供的评论中,在 alacitty 的 repo 上的一个问题中找到了它们:

https://github.com/alacritty/alacritty/issues/109

【讨论】:

这很适合tmux/neovim/alacritty。非常感谢!【参考方案18】:

我在尝试导出不同的TERM 或在我的.tmux.conf 中设置默认终端时运气不佳。

我在 tmux 中修复 vim 颜色的解决方案是将此行添加到 .tmux.conf:

set -g terminal-overrides 'xterm:colors=88'

鉴于我的 TERM=xterm 和 iTerm 也设置为 xterm,我不确定为什么需要此覆盖,但它似乎有效。

【讨论】:

【参考方案19】:

我正在使用 Ubuntu 仿生 18.04.4 LTS 和 tmux 2.6。 我有同样的问题,只需将其添加到 .bashrc 即可解决

export TERM=screen-256color

当然不要忘记来源。 source ~/.bashrc

或者只是重新启动您的终端

【讨论】:

【参考方案20】:

环境

Fedora 29 工作站 x86_64,GNOME 终端 3.30.1

VIM - Vi IMproved 8.1(2018 年 5 月 18 日,2019 年 3 月 8 日 09:25:44 编译)

GNU bash,版本 4.4.23(1)-release (x86_64-redhat-linux-gnu)

tmux 2.7

vim 正在使用日晒方案。

.vimrc

...
let g:solarized_termcolors=256
let g:solarized_termtrans=1

syntax enable
set background=dark
colorscheme solarized
...

$TERM 在 bash 中的值为:

[u@loc ~]$ echo $TERM
xterm-256color
[u@loc ~]$ tput colors
256

方法 1:有效。

检查 tmux 会话中的 $TERM 值。获取

[u@loc ~]$ echo $TERM
screen
[u@loc ~]$ tput colors
8

所以,只需在 tmux 会话中设置 export TERM=screen-256color。此方法仅适用于会话的当前窗格。


方法2:有效。

创建~/.tmux.conf 文件并将set -g default-terminal "tmux-256color" 添加到文件中。

或者直接运行echo "set -g default-terminal \"tmux-256color\"" > ~/.tmux.conf

然后终止所有 tmux 会话。

启动一个新会话并检查 tmux 会话中的 $TERM 值。获取

[u@loc ~]$ echo $TERM
tmux-256color
[u@loc ~]$ tput colors
256

vim 彩色方案适用于所有窗格和所有 tmux 会话。

我还在~/.tmux.conf 中尝试了xterm-256colorscreen-256color。它们都可以很好地为 vim 方案着色。

顺便说一句,我的~/.bash_profile~/.bashrc~/.vimrc 中没有任何与此设置相关的配置。

另见https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-a-256-colour-terminal、https://github.com/tmux/tmux/wiki/FAQ#why-do-you-use-the-screen-terminal-description-inside-tmux

其他有用的演讲是Vim color scheme changes in tmux #699、256-color-support-for-vim-background-in-tmux、getting-256-colors-to-work-in-tmux、tmux-term-and-256-colours-support

【讨论】:

【参考方案21】:

我正在使用 gnome 终端,这解决了问题,但是 (0) 不要忘记:

killall tmux

(1) 编辑.tmux.conf

# 24 bit color
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"

(2) 编辑:.vimrc

" Enable true color
if exists('+termguicolors')
  let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
  let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
  set termguicolors
endif

rinetd 在 tmux repo 问题上发布的解决方案: https://github.com/tmux/tmux/issues/1246

【讨论】:

【参考方案22】:

假设您已经拥有与终端匹配的 vim 颜色:

    杀死所有运行tmux kill-server的tmux会话

    ~/.tmux.conf中为tmux创建用户配置文件

    将以下几行添加到.tmux.confset -g default-terminal "tmux-256color"set -ga terminal-overrides ",xterm-termite:Tc"

    在你的命令行中运行echo $TERM

    echo $TERM返回的输出替换xterm-termite

【讨论】:

【参考方案23】:

我使用 Fedora 34。

我将此添加到 .tmux.conf 文件中

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

然后将这个添加到 .vimrc

set background=dark
set t_Co=256

【讨论】:

以上是关于在 tmux 模式下丢失 vim 颜色方案的主要内容,如果未能解决你的问题,请参考以下文章

十七vim介绍vim颜色显示和移动光标vim一般模式下移动光标vim一般模式下复制剪切和粘

vim介绍/vim颜色显示和移动光标/ vim一般模式下移动光标/ vim一般模式下复制剪切和粘贴

vim介绍 vim颜色显示和移动光标 vim一般模式下移动光标 一般模式下复制剪切粘贴

5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vi

Vim CursorLine 在插入模式下的颜色变化

vim