256颜色支持tmux中的vim背景


98

在tmux中使用vim时,我看到启用了256色支持。带有$ tput颜色

但是,在tmux中更改vim中的颜色方案将在每行基础上而不是整个背景上更改颜色方案。看截图在此处输入图片说明

例如,这是我的.vimrc文件的片段。我原来的colorcheme被晒黑了,然后运行:colorscheme molokai后,您会看到发生了什么。

信息

  • 侏儒终端
  • 重击

在我的〜/ .tmux.conf中

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

在我的〜/ .vimrc中

    set t_Co=256

在我的〜/ .bashrc中

# ryan
export TERM="xterm-256color"
# ryan
alias tmux="tmux -2"

在我的〜/ .profile中

# ryan 256 color support
if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
  else
    export TERM='xterm-color'
  fi

有什么想法可以让我改变vim的全部色彩吗?文件中的所有代码片段看起来都不错吗?


如果在普通模式下按Ctrl-l或执行“:redraw”命令会怎样?
Heptite'3

@Heptite仍然没有发生任何变化,颜色仍然是每行一样,如屏幕截图所示
winchendonsprings 2012年

Answers:


75

从.bashrc和.profile的外观来看,tmux中的shell覆盖了tmux conf中的'default-terminal'设置。像这样:

  • tmux用 TERM=screen-256color
  • .bashrc / .profile运行,设置 TERM=xterm-256color
  • vim运行,尝试为tmux使用不正确的TERM

你可以通过运行检查

echo $TERM

在新鲜的tmux外壳中。

Tmux对于正确设置终端相对挑剔。如果可以,请在gnome-terminal的配置中而不是在.bashrc中设置术语值。否则,请用“ screen”或“ screen-256color” TERM检查这些设置,在这种情况下不要重置它们。

Tmux确实希望将终端设置为screenscreen-256color


5
好吧,你修好了。我只是注释掉了.bashrc和.profile文件中与将颜色设置为256有关的所有内容。重新启动tmux和vim可以使用适当的背景并启用256色。您能告诉我gnome-terminal配置文件在哪里吗?另外,当您说tmux希望将终端设置为'scfeen-256color时,您是说要在我的tmux.conf中添加它吗?谢谢
winchendonsprings 2012年

我没有方便检查的带有gnome-terminal的机器,但是该设置应该在GUI中的某个位置,可能在“配置文件设置”下或类似的东西下。
布洛伊2012年

5
另外,是的,让tmux对它产生的外壳做自己的事情。将该set -g default-terminal "screen-256color"行保留在您的tmux conf中。
布洛伊2012年

2
以上就是我所要做的(确保TERM正确设置且未在tmux中覆盖),然后我不得不使用'tmux -2'加载tmux。
phantomwhale

试试看if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi,它为我工作。
不对称

59

如此处所述,通过清除终端选项(在Vim中运行,然后按+ 刷新终端的显示)来禁用背景颜色擦除(BCE),以便在tmux和GNU屏幕中使用Vim时,配色方案能够正常工作。t_ut:set t_ut=ControlL


7
这是唯一对我有用的东西!
Oz123 2013年

3
我最终set t_ut=在我的vimrc中添加了代码,这消除了手动使用命令的需要,并且由于会话在禁用BCE的情况下开始,因此无需使用<kbd> Control </ kbd> + <kbd> L </ kbd>。
erran

使用PuTTY时这是必不可少的。当配色方案具有背景时,所有TERM组合均不足。线程的强大补充。
botimer

这是可行的,但是当应用此解决方案时,使用鼠标进行复制和粘贴也会复制并粘贴空格尾部的行(如果它们被突出显示。)
马毛

17

我在这篇文章中找到了更好的方法。您可以为tmux设置别名,以tmux -2强制tmux假定外壳使用256色端子。


4

这是在#Ubuntu和#Mac中对我有用的东西:

# File: ~/.bashrc (Ubuntu), ~/.bash_profile (Mac)
# for VIM and TMUC
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-256color
fi
alias tmux='tmux -2'  # for 256color
alias tmux='tmux -u'  # to get rid of unicode rendering problem

重新加载设置:

$ source〜/ .bashrc#Ubuntu

$ source〜/ .bash_profile#Mac

为Mac设置.bashrc(因为tmux使用它)

# File: ~/.bashrc (Mac)
source ~/.bash_profile

在〜/ .tmux.conf中设置“默认终端”选项。

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu

1

一个快速修复是在终端中运行以下命令。

export TERM=xterm-color

您可以将其添加到您~/.bash_profile或其他配置文件中,以便始终在启动时进行设置。


谢谢!这就是我要添加到.zshrc视觉模式下才能实际看到的所有内容。
danmcardle,2013年

1

对于gnome-terminal + tmux + vim,我也有非常相似的问题,但是它也扩展到特定的组合键问题:。我不得不将一些东西结合在一起。首先,我必须将.tmux.conf设置为:

# Ensure terminal starts with its own colour scheme (helps Vim/Neovim themes to not break)
set -g default-terminal "xterm-256color"
# set -g default-terminal "screen-256color" # no S-Fx keys ;-(
# and ensure the key-codes are xterm alike
set -g xterm-keys on

然后在.vimrc中:

if $COLORTERM == 'gnome-terminal'
      set t_Co=256
endif
set t_ut=

这样就完成了按键和背景的工作。


1

如果您仍然遇到问题:我注意到vim退回到使用t_Co=8tmux内部的option ,即使将$TERM其设置为screen-256color。我的解决方法是vimrc中的以下代码段:

if exists("$TMUX")
        set t_Co=256
        set notermguicolors
else
        set termguicolors
endif

$TMUX变量不仅填补如果TMUX会话中。在这种情况下,我允许vim使用256种颜色。请注意,由于tmux不支持真色,因此我也未设置termguicolors。


0

刚才面临着同样的问题。根据bloy的答案和〜/ .profile的当前内容(实际上,它与winchendonsprings相同),我解决了以下问题:

~/.profile

if [[ -z $TMUX ]]; then
    if [ -e /usr/share/terminfo/x/xterm+256color ]; then # may be xterm-256 depending on your distro
        export TERM='xterm-256color'
    else
        export TERM='xterm'
    fi
else
    if [ -e /usr/share/terminfo/s/screen-256color ]; then
        export TERM='screen-256color'
    else
        export TERM='screen'
    fi
fi

逻辑很简单:如果我们不在tmux会话中,请使用xterm(有色或无色)。否则,屏幕也一样。

也许它太冗长,但是您明白了。

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.