在 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 -2
或 tmux -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 的默认 TERM
是 screen
。 -2
不会改变 TERM
并且不会改变任何与 Vim 从其环境中获取的信息相关的颜色::echo &t_Co
仍然返回 8
。有了它给出的信息,Vim 做了正确的事。唯一必须设置的是 1. 你的终端模拟器的 TERM
到 xterm-256color
或类似 urxvt-unicode-256color
的等效值和 2. tmux 的默认 TERM
和 set -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】:如果您使用tmuxinator
或mux
,则需要将这些添加到.bashrc
或.zshrc
:
alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'
这些强制在终端中使用 256 色。
然后tmux
、tmuxinator
和mux
命令都将起作用。
【讨论】:
【参考方案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-256color
和screen-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.conf
:set -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一般模式下移动光标 一般模式下复制剪切粘贴