tmux 中的 Vim 显示错误的颜色

dhu*_*bin 64 vim tmux

我安装了 Ubuntu 11.10。然后为 Gnome 终端下载 Solarized 主题。从终端我的 vim 看起来不错:插件 vim-powerline 显示正确,语法以正确的颜色突出显示。但是当我运行 tmux 并运行 vim 时 - 语法高亮仅使用一种基本颜色,而 vim-powerline 不显示任何颜色。我查看了 vim-powerline 上的常见问题解答,解决方案应该是 .tmux-config 中的这一行:

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

但它不起作用。我查看了 TERM,它返回了 'xterm',所以我尝试了:

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

但这也无济于事。

这是 .tmux.config 中唯一的一行。在 .vimrc 我有以下几行:

call pathogen#infect()
set nocompatible
set encoding=utf-8
set laststatus=2
let g:Powerline_symbols = 'fancy'
set t_Co=256
syntax enable
set background=dark
colorsheme solarized
Run Code Online (Sandbox Code Playgroud)

Hol*_*rel 57

使用以下标志启动 tmux 为我解决了这个问题:

tmux -2
Run Code Online (Sandbox Code Playgroud)

来自 tmux 手册页:

-2 强制 tmux 假设终端支持 256 色。


小智 34

这对我有用

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

删除 .vimrc 的旧术语值,相信我这会起作用

  • 对我不起作用。tmux 1.8、vim 7.4.1816、ubuntu x86_64 内核 3.13.0-92-generic。供参考。 (2认同)
  • 它在没有 .vimrc 设置的情况下对我有用,只有 .tmux.conf。 (2认同)
  • .tmux.conf 设置对我有用! (2认同)

Ram*_*oid 30

我在使用 Byobu 5.17 和 tmux 1.5 的 Ubuntu 10.04 LTS 上遇到了同样的问题,使用来自 GitHub 存储库的最新 Solarized。

我能够通过$TERM.bashrc文件中指定来部分解决这个问题:

export TERM="xterm-256color"

似乎在启动板上也有一个错误,但尚未解决: byobu 未正确显示 dircolors

  • 这是唯一对我有用的东西! (2认同)

71G*_*1GA 8

在我看来,似乎没有人知道在说什么......

\n
\n

我们的开通程序是如何运作的:

\n
    \n
  1. 打开终端(以哪个为准)
  2. \n
  3. 打开一个tmux
  4. \n
  5. 打开vim/nvim
  6. \n
\n
\n

1个航站楼

\n

打开终端(无论你使用哪个 - 我使用st并编写命令:

\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 $ \xe2\x94\x82 ziga > ziga--workstation > ~\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x98\n  \xe2\x94\x94\xe2\x94\x80> echo $TERM\n\nst-256color\n
Run Code Online (Sandbox Code Playgroud)\n

作为答案,我得到了一个字符串,因为该字符串被编译为(检查此处)中的st-256colorC 字符串文字。无论您使用哪个终端,情况都是类似的。在二进制文件中的某处有一个字符串文字,在终端启动时将其设置为环境变量。termnamest TERM

\n

在这里你除了记住这个字符串之外什么也做不了。

\n
\n

2个多路复用器

\n

现在让我们继续这个链... 在您的终端之后tmux打开。在配置文件中,我现在必须首先确保识别我的终端设置的环境变量。所以我这样写:~/.tmux.confTERM

\n
set-option -sa terminal-overrides ",st*:Tc"\n
Run Code Online (Sandbox Code Playgroud)\n

此行检查环境变量是否以(therefore )$TERM开头,并确保使用真彩色 ( ),因为当前的“索引颜色” (8 位 = 2^8 = 256 颜色)对我们来说不够。我们想要使用“真彩色” (24 位 = 2^24 = 16777215 种颜色)。在这里,我们可以添加更多行,以确保我们能够匹配 的值。在我的例子中,下面的行也有效,因为它在 的中间搜索:st st*Tc tmux TERM256colTERM

\n
set-option -sa terminal-overrides ",*256col*:Tc"\n
Run Code Online (Sandbox Code Playgroud)\n

如果我要使用xfce4-terminal该集合,TERM = xterm-256color我可以使用这样的行:

\n
set-option -sa terminal-overrides ",xterm*:Tc"\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止已经tmux涵盖了。但在我们继续这个链条之前,我们必须确保tmux也会导出它的环境变量TERM

\n

在这种情况下,我们可以使用以下行将其设置为我们想要的任何内容~/.tmux.config

\n
set -g default-terminal "tmux-256color"\n
Run Code Online (Sandbox Code Playgroud)\n

现在确保退出tmux并终止它的服务器:

\n
tmux kill-server\n
Run Code Online (Sandbox Code Playgroud)\n

然后tmux使用命令进入tmux并执行命令:

\n
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 $ \xe2\x94\x82 ziga > ziga--workstation > ~\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80\xe2\x94\x98\n  \xe2\x94\x94\xe2\x94\x80> echo $TERM\n\ntmux-256color\n
Run Code Online (Sandbox Code Playgroud)\n

你应该得到答案tmux-256color。现在我们可以继续vim...

\n
\n

3维姆

\n

在最后一步中,我们只需vim在其配置文件中添加此行即可进行配置~/.vimrc

\n
if exists(\'+termguicolors\') && ($TERM == "st-256color" || $TERM == "tmux-256color")\n    let &t_8f = "\\<Esc>[38;2;%lu;%lu;%lum"\n    let &t_8b = "\\<Esc>[48;2;%lu;%lu;%lum"\n    set termguicolors\nendif\n
Run Code Online (Sandbox Code Playgroud)\n

这正确地设置了转义序列&t_8f&t_8b并最终在内部设置了“真实颜色”vim。但这仅当TERM值为:

\n
    \n
  • st-256color vim(当我直接在终端中打开而没有在此之前st打开时)tmux

    \n
  • \n
  • tmux-256color (当我vim已经进入时打开tmux

    \n
  • \n
\n

如果您使用多个终端,则应在此处添加它们,如下所示:

\n
if exists(\'+termguicolors\') && ($TERM == "st-256color" || $TERM == "tmux-256color" || $TERM == "xterm-256color")\n    let &t_8f = "\\<Esc>[38;2;%lu;%lu;%lum"\n    let &t_8b = "\\<Esc>[48;2;%lu;%lu;%lum"\n    set termguicolors\nendif\n
Run Code Online (Sandbox Code Playgroud)\n

否则颜色将无法在所有终端上工作...祝你好运!

\n


Mar*_*ski 6

应在 ~/.tmux.conf 中将终端类型设置为 screen-256color。它告诉 tmux 如何设置 TERM 环境变量,因此它不适用于当前会话 - 启动一个新会话然后进行测试。

如果仍然不起作用,您可以使用以下命令运行 Vim:

TERM=screen-256color vi
Run Code Online (Sandbox Code Playgroud)

这只是为一次性 vi 执行设置环境变量。

如果这不能使 vim 显示所有颜色,请测试您的终端(我不确定您是否仅使用一个终端仿真器进行测试)是否已编译为支持 256 调色板 - 从以下位置下载并运行以下 Perl 脚本有问题的终端模拟器。

http://scie.nti.st/dist/256colors2.pl

附言。我想您已经纠正了乔丹布罗克注意到的拼写错误。


小智 1

你的最后一行有错字.vimrc

它应该是colorscheme solarized

不确定这是否有帮助:)