Reputation: 4745
I'm running iterm2 and when I'm in tmux mode the colorscheme I have set in vim does not show up. Only the color scheme I've set in iterm. If I run vim from shell the colorscheme appears correct - its only when I'm in tmux mode.
I've tried setting :colorscheme molokai
when in vim (see screenshot below) and it doesn't change - again, the default colorscheme for iterm2 remains.
Am I missing some setting to iterm or tmux.conf? My dotfles are up on github here.
Upvotes: 268
Views: 129181
Reputation: 1
Just add two lines in ~/.tmux.conf
:
set -g default-terminal "tmux-256color"
set-option -a terminal-features 'tmux-256color:RGB'
It works on tmux 3.2a & Ubuntu 22.04.
Upvotes: 0
Reputation: 1
The idea is to make tmux using the same terminal and 24 bit color as your terminal so that they will look the same.
Run echo $TERM
and echo $TERMCOLOR
in iTerm we get:
xterm-256color
and truecolor
.
Run echo $TERM
and echo $TERMCOLOR
in tmux we get:
screen-256color
and blank.
To make them the same, just add 2 lines into ~/.tmux.conf
:
set -g default-terminal "xterm-256color"
to use xtermset -ga terminal-overrides ",xterm-256color:Tc"
to use true colortmux kill-server
to restart tmux for the change to take effectset termguicolors
in .vimrc
will make your vim colors same as terminal. Put in this line to your ~/.vimrc
if you are having disparities between vim and terminal colorscheme.This should do it. Of course your tmux version should support true color first.
Upvotes: 0
Reputation: 347
Inside Vim you can check the term variable:
:set term?
Do this inside tmux and outside, and compare them. Here I put this line inside .vimrc to solve the problem:
set term=xterm-256color
And now, both inside and outside tmux, the term variable is the same.
Upvotes: 1
Reputation: 4292
You likely experiencing one of two problems, and possibly both at the same time.
$TERM
in tmux
doesn't support color, or not the colors you need. Perhaps it's screen
, which is monochrome.Change this by modifying the default-terminal
. Possibly using
set -g default-terminal "tmux-256color"
or screen.xterm-256color
, screen-256color
etc.
In order to use truecolor in vim you usually
set termguicolors
but this only works nicely with xterm*
. Use this in your .vimrc
to play nicely with xterm
, as well as other screen
, tmux
variants.
if !has('gui_running') && &term =~ '\%(screen\|tmux\)'
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
endif
set termguicolors
The check in term should be a bit more elaborate, to actually match variants with color but this should work for most setups.
tmux
is xterm
, it's not. Both top answers suggest this approach but it's stated in the manualFor tmux to work correctly, this must be set to ‘screen’, ‘tmux’ or a derivative of them.
Upvotes: 0
Reputation: 406
So this a bit on the stale side, but it's might be worth mentioning that using screen will often break the Home and End keys. Using
export TERM="xterm-256color"
it should keep the functionality of these and allow the color scheme (or powerline) to work fine.
Upvotes: 22
Reputation: 485
I use fedora 34.
I add this to .tmux.conf file
set -g default-terminal "xterm-256color"
Then add this to .vimrc
set background=dark
set t_Co=256
Upvotes: 0
Reputation: 3736
ENV:
Fedora 29 workstation x86_64, GNOME Terminal 3.30.1
VIM - Vi IMproved 8.1 (2018 May 18, compiled Mar 8 2019 09:25:44)
GNU bash, version 4.4.23(1)-release (x86_64-redhat-linux-gnu)
tmux 2.7
vim is using solarized scheme.
.vimrc
...
let g:solarized_termcolors=256
let g:solarized_termtrans=1
syntax enable
set background=dark
colorscheme solarized
...
The value of $TERM
in bash is:
[u@loc ~]$ echo $TERM
xterm-256color
[u@loc ~]$ tput colors
256
Mehthod 1: works.
Check $TERM
value inside tmux session. Get
[u@loc ~]$ echo $TERM
screen
[u@loc ~]$ tput colors
8
So, just set export TERM=screen-256color
inside tmux session. This method only works in the current pane of the session.
Method 2: works.
Create ~/.tmux.conf
file and add set -g default-terminal "tmux-256color"
to the file.
or Just run echo "set -g default-terminal \"tmux-256color\"" > ~/.tmux.conf
Then kill all tmux sessions.
Start a new session and check the $TERM
value inside tmux session. Get
[u@loc ~]$ echo $TERM
tmux-256color
[u@loc ~]$ tput colors
256
And vim colorized scheme works fine for all pane and all tmux sessions.
I also tried xterm-256color
and screen-256color
in ~/.tmux.conf
. They all work fine for colorizing the vim scheme.
By the way, I don't have any configurations being related to this setting in my ~/.bash_profile
, ~/.bashrc
and ~/.vimrc
.
See also 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
Other useful talks are 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
Upvotes: 1
Reputation: 21
Assuming that you already have vim colors matching with your terminal:
Kill all tmux sessions running tmux kill-server
Create a user configuration file for tmux in ~/.tmux.conf
Add to the .tmux.conf
the following lines:
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",xterm-termite:Tc"
Run in your command line echo $TERM
Replace xterm-termite
with the output returned by echo $TERM
Upvotes: 1
Reputation: 581
I'm using gnome terminal and this solved the problem, but (0) don't forget to:
killall tmux
(1) Edit .tmux.conf
# 24 bit color
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"
(2) Edit: .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
Solution posted by rinetd on tmux repo issue: https://github.com/tmux/tmux/issues/1246
Upvotes: 6
Reputation: 43
Using these two lines in my .tmux.conf worked for me, I'm using Ubuntu 20.04 with Alacritty.
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",alacritty:RGB"
Found them in an issue on alacitty's repo, in the comment provided by YodaEmbedding:
https://github.com/alacritty/alacritty/issues/109
Upvotes: 2
Reputation: 11
I am using Ubuntu bionic 18.04.4 LTS and tmux 2.6. I have the same issue and it can be resolved by simply adding this into .bashrc
export TERM=screen-256color
And ofcourse don't forget to source it.
source ~/.bashrc
Or just restart your teminal
Upvotes: 1
Reputation: 655
I've removed the line set termguicolors
, but it doesn't work.
Setting set notermguicolors
instead in the .vimrc
works.
Upvotes: 3
Reputation: 119
Just had to deal with this problem, and although all previously posted answers were helpful, they did not solve the issue in my case.
My problem was fixed by removing the following line in my .vimrc
:
set termguicolors
which was redondant with another instruction anyway.
Now, with the following line found in previous anwsers in my .tmux.conf
:
export TERM="screen-256color"
all is nice and colorful.
Upvotes: 8
Reputation: 370
Since this is the first result on Google and since none of the above helped..wanted to post this so that someone might find it helpful
in .vimrc
:
set background=dark
set t_Co=256
HTH
Upvotes: 18
Reputation: 398
Adding the following line in .tmux.conf worked for me with macOS Sierra 10.12.6,
set -g default-terminal "screen-256color"
Upvotes: 5
Reputation: 4745
As @romainl mentions above, I needed to force tmux to use 256 colors by adding the -2
flag:
$ tmux -2
I added alias tmux='tmux -2'
to my bash_profile, so, I don't forget :)
Upvotes: 81
Reputation: 447
In case anyone needs 24-bit color support:
Tmux supports 24-bit color as of version 2.2. If your terminal supports 24-bit color, add your terminal to the terminal-overrides setting. For example,
set -ga terminal-overrides ",xterm-256color:Tc"
My environment checklist:
xterm-256color
)xterm-256color
to .vimrc
)set -ga terminal-overrides ",xterm-256color:Tc"
to .tmux.conf
)Nothing else I need to add in .bashrc
or .zshrc
.
Hope this could help.
Upvotes: 15
Reputation: 2025
I have tried all of the instructions above, and I found out the most important thing is I have to explicitly add the following line in my .bashrc file.
export TERM=screen-256color
I don't know why alias tmux="TERM=screen-256color-bce tmux" doesn't work out. I use Sierra 10.12.1.
Upvotes: 11
Reputation: 141
If you use tmuxinator
or mux
, you will need to add these in .bashrc
or .zshrc
:
alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'
These forces to use 256-color in terminal.
Then tmux
, tmuxinator
and mux
command will all work.
Upvotes: 3
Reputation: 2141
I didn't have much luck trying to export a different TERM
or set default-terminal in my .tmux.conf
.
My solution for fixing vim colors within tmux was adding this line to .tmux.conf
:
set -g terminal-overrides 'xterm:colors=88'
I'm not sure why this override was needed given that my TERM=xterm
and I have iTerm set to xterm as well, but it seems to work.
Upvotes: 1
Reputation: 1257
If you find yourself in the same sitation as me, that none of the above worked.. try this:
in .tmux.conf
:
set -g default-terminal "xterm"
in bash config (maybe .bashrc
or .bash_profile
):
alias tmux="tmux -2"
and then run:
killall tmux
and then relaunch tmux
Upvotes: 4
Reputation: 1575
From the tmux man page, adding flag as following:
tmux -2
This -2
flag forces tmux to run on 256-color mode.
This works for me
Upvotes: 2
Reputation: 2127
I tried all the solutions above and what finally worked for me is putting the following lines in .tmux.conf
:
set -g default-terminal "xterm-256color"
Upvotes: 126
Reputation: 988
In order to set up correct color and to get rid of rendering issue in both Ubuntu and Mac:
Upvotes: 2
Reputation: 1129
I needed vim to display correctly with tmux in terminal on ubuntu and cygwin/mintty on windows. I got it to work by combining the answers like this.
In .bashrc:
alias tmux="tmux -2"
In .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
based on answers from this question, this Vim wiki page and this block cursor question
Upvotes: 19
Reputation: 59234
I just discovered why I was having a lot of confusion. I, like others here, was having a difficult time getting the default-terminal setting to take effect. I remembered that I had a tmux session in the background. I re-attached my session, closed out my processes, and closed ALL tmux processes. The next time I restarted tmux the default-terminal setting in .tmux.conf
began to take effect. I don't know if others are doing this as well but I recommend closing all tmux processes before modifying the .tmux.conf
file.
I got my setup to work on my local machine (OSX 10.9.5 with iTerm2) without any modification to .bashrc
or .bash_profile
. All I did was add the line set -g default-terminal "xterm-256color"
to ~/.tmux.conf
and restarted all tmux processes.
I got my remote setup (ssh to Ubuntu 14.04) to work exactly the same way without any modifications to .bashrc
. I simply added set -g default-terminal "xterm-256color"
to ~/.tmux.conf
on my remote machine and restarted all remote tmux processes.
You can test what Vim is seeing by doing echo $TERM
from within a tmux session. It kept saying screen
as the value until I restarted all tmux processes, at which point it reflected xterm-256color
as expected.
Hope that helps.
Upvotes: 39
Reputation: 11028
I had the same problem. Only difference was I am using solarize
rather then molokai
.
To fix the issue, I have set up an alias in ~/.bashrc
:
alias tmux="TERM=screen-256color-bce tmux"
And set up the default-terminal
option in ~/.tmux.conf
:
set -g default-terminal "xterm"
Lastly, do $ source ~/.bashrc
to load new alias.
Upvotes: 287