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


228

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

我已经尝试:colorscheme molokai在vim中进行设置(请参见下面的屏幕截图),并且设置没有改变-再次,iterm2的默认颜色仍然保留。

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


31
当您这样做时会发生什么$ tmux -2
romainl 2012年

4
仅此而已。什么是-2标志?
tristen 2012年

11
它强制tmux使用256色。
romainl 2012年

Answers:


251

我有同样的问题。唯一的区别是我正在使用solarize而不是molokai

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

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

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

set -g default-terminal "xterm"

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


20
我用它代替,tmux -2因为它比较冗长。
thameera

97
就个人而言,我不得不习惯于set -g default-terminal "screen-256color"工作,而不是xterm在OS X上工作,将其放入Ubuntu盒子中。我提到这个网站:rhnh.net/2011/08/20/vim-and-tmux-on-osx
waffl

7
这里的别名没有意义:它在tmux中假装它在屏幕或tmux中运行,这种情况几乎没有。要告诉tmux假设其运行的终端支持256种颜色,请运行tmux -2tmux -2 attach(tmux决定每次将新会话或现有会话附加到终端时)。明智的别名是alias tmux='tmux -2'。另请参见tmux,TERM和256色支持
Gilles'SO-别再作恶了

3
我在其他答案(找不到参考文献)中读到,虽然我不确定,但强制执行TERM不是一个好习惯。由于该tmux -2选项set -g default-terminal "screen-256color"对我有用,因此这将是我的选择。但是还是谢谢你!
marcelocra

5
如果该.tmux.conf设置似乎没有生效,请关闭所有 tmux进程并重新启动。您set -g default-terminal "screen-256color"无需在中设置任何别名即可.bashrc。我认为人们正在做诸如环境变量别名之类的变通办法,因为他们并没有在配置后关闭所有tmux进程.tmux.conf
2014年

74

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

$ tmux -2

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


实际上,这根本不是强制性的:我不使用,-2但是在tmux的Vim中有256种颜色。
romainl 2012年

@romainl如果tmux不能将您的终端检测为具有256种颜色,这是很常见的。
吉尔斯(Gillles)“所以-别再作恶了”

1
@ Gilles,Vim没有检测到终端支持256种颜色,因为tmux的默认TERM值为screen-2不会改变TERM,并且不会改变与Vim从其环境中获取的信息有关的任何颜色::echo &t_Co仍然返回8。有了信息,Vim做正确的事。必须设置的唯一内容是1.终端仿真器的TERMto xterm-256color或等效值,如urxvt-unicode-256color和2. tmux的默认值TERMwith set -g default-terminal "screen-256color"
romainl 2014年

@romainl大多数环境都TERM将设置为xterm,而不是xterm-256color,因此需要运行tmux -2(或TERM=xterm-256color tmux,或更改termcap或完成同一件事的其他方式)。
吉尔(Gilles)'“ SO-别再邪恶了”

1
@Gilles,问题在于-2不会完成任何对Vim的256色支持行为产生任何影响的事情,因为对Vim唯一重要的是您的TERM,并将其设置在链的末端:在您的终端仿真器。如果通过5个主机进行SSH并且终端设置正确,则在第5个主机上启动的Vim将看到256色TERM并采取相应措施。如果在链的任何位置使用tmux,则-2将对Vim的行为造成零影响,因为由于tmux的默认TERM:screen,-2,否则,只能看到其环境限制为8种颜色。
romainl 2014年

72

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

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

我正在通过SSH使用tmux,即使我没有使用xterm,也只是常规SSH,这对我也起作用。
armen.shimoon

我没有在ssh上使用它,这是唯一对我有用的答案。OSX 10.9.5中的本地iTerm会话。
Chev

这对我有用(MacOS Mojave + iTerm2 / Alacritty),谢谢
Adrian Magdas

31

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

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

我获得了远程设置(对于Ubuntu 14.04而言为ssh),其工作方式完全相同,而无需对进行任何修改.bashrc。我只是将其添加set -g default-terminal "xterm-256color"~/.tmux.conf远程计算机上,然后重新启动了所有远程tmux进程。

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

希望能有所帮助。


1
自从这篇文章发布以来,我已经在其他几种操作系统上进行了确认,到目前为止,关闭所有进程并设置default-terminal选项.tmux.conf一直有效100%。
2014年

2
我也是!如果这个答案更远,我本可以花更少的时间。
Sigfried

21

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

export TERM="xterm-256color"

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


感谢您指出了这一点。我不知道 从到目前为止我所看到的,它似乎仍然对Debian derv有用。在我的辩护中,该职位是针对OSX的。
杰帕特里克

tmux 1.9a,OSX 10.9.2,iTerm2构建1.0.0.20130622在.bash_profile中导出TERM =“ xterm-256color”,然后将iterm设置为xterm-256-color对我有用。无需设置任何tmux配置。
agenteo 2014年

14

我需要vim才能在ubuntu上的终端中使用tmux正确显示,在Windows上使用cygwin / mintty。我通过结合这样的答案使它起作用。

在.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

基于此问题,此Vim Wiki页面此区块光标问题的答案


我遇到了薄荷的问题,并添加了vim配置为我修复了它。我什至不需要做tmux别名。
trigoman

@trigoman,对我也一样,我只需要更新.vimrc。
Masood Alam

我尝试了所有先前的建议。刚刚添加set t_Co=256到.vimrc中,它已修复。我不需要创建tmux别名。
迈克”

11

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

export TERM=screen-256color

我不知道为什么别名tmux =“ TERM = screen-256color-bce tmux”无法解决。我使用的是Sierra 10.12.1。


这对我有用。只是普通出口。+1
markovchain

10

如果任何人都需要24位颜色支持:

从2.2版开始,Tmux支持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来启用24位颜色.vimrc
  • tmux 2.3(添加set -ga terminal-overrides ",xterm-256color:Tc".tmux.conf

我不需要添加.bashrc.zshrc

希望这会有所帮助。


唯一对我有用的东西。这到底是做什么的?
Volk

6

由于这是在Google上的第一个结果,并且上述方法均无济于事。

.vimrc

set background=dark
set t_Co=256

高温超导


已经测试了这两行,它们在WSL-Windows10上的Vim上运行良好。
llinfeng

1
非常感谢。这适用于具有gnome-terminal的Ubuntu 18
Roymunson,

4

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

设置-g默认终端“ screen-256color”


同样在这里。感谢@waffl查找此解决方案!
亚当·埃里克森

3

如果您发现自己和我一样,以上都不起作用。

.tmux.conf

set -g default-terminal "xterm"

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

alias tmux="tmux -2"

然后运行:

killall tmux

然后重新启动tmux


3

如果使用tmuxinatormux,则需要在.bashrc或中添加这些.zshrc

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

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

然后tmuxtmuxinatormux命令将全部起作用。



2

只是必须解决这个问题,尽管以前发布的所有答案都是有帮助的,但对于我而言,它们并不能解决问题。

解决了我的问题,方法是删除我的以下行.vimrc

set termguicolors

无论如何,这是另一个指令的更新。

现在,在my的先前aners中找到以下行.tmux.conf

export TERM="screen-256color"

一切都很好,丰富多彩。


2

我已经删除了该行set termguicolors,但是它不起作用。设置set notermguicolors而不是在.vimrc工作。


1

在tmux手册页上,添加标志,如下所示:

tmux -2

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

这对我有用


1

我不太想尝试在自己的中导出其他TERM终端或设置default-terminal .tmux.conf

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

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

考虑到我TERM=xterm和我也将iTerm也设置为xterm ,我不确定为什么需要此覆盖,但是它似乎可以正常工作。


0

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

export TERM=screen-256color

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.