lose vim colorscheme in tmux mode - macos

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.

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.

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"

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

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.

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.

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

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:
macOS Sierra 10.12.3
iTerm2 3.0.14 (Report Terminal Type is xterm-256color)
neovim 0.1.7 (Enable 24-bit color by adding: xterm-256color to .vimrc)
tmux 2.3 (Add set -ga terminal-overrides ",xterm-256color:Tc" to .tmux.conf)
Nothing else I need to add in .bashrc or .zshrc.
Hope this could help.

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

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.

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.

Adding the following line in .tmux.conf worked for me with macOS Sierra 10.12.6,
set -g default-terminal "screen-256color"

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

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

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.

I've removed the line set termguicolors, but it doesn't work.
Setting set notermguicolors instead in the .vimrc works.

In order to set up correct color and to get rid of rendering issue in both Ubuntu and Mac:
check this

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

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

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.

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

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

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

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

Related

tmux is not using screen-256color even it is set in the config file

I am trying to get tmux to use screen-256color instead of xterm-256color, as it is not recommended. But when I am not using tmux, I would like to keep it as xterm-256color
A little bit of my setup, I am currently using iTerm2 and ssh to my development linux box, which is using zsh.
In my ~/.zshrc, I have:
export TERM="xterm-256color"
In my ~/.tmux.conf, I have:
set -g default-terminal "screen-256color"
With this configuraiton, without tmux, echo $TERM returns xterm-256color (which is right) and with tmux, echo $TERM is still returning xterm-256color instead of screen-256color.
Is there anything else I need to set in order for this to work?
Thanks!
The reason this does not work as expected is, that the zsh session that is started inside tmux overwrites TERM.
You should not set TERM from within in your shell. TERM is the way the terminal informs the shell and other applications about its capabilities (number of colors, key sequences for special keys, etc.). If you change TERM inside the shell, you change the what features the shell and applications expect from the terminal without the terminal itself knowing about it. Oftentimes this may not be an actual issue, but it is better to change the terminal configuration and set the desired value there.
You already did so when setting screen-256color in the configuration of tmux, which is essentially a terminal emulator, too. To do it for iTerm2 (tested with version 3.0.10):
Open the Preferences dialog (in the Menu: iTerm2 → Preferences, or press ⌘+,).
In the dialog go to Profiles → Terminal.
There you can choose the desired value for TERM under Report Terminal Type.
You could modify your .zshrc file to check if you are running in tmux:
[ -z "$TMUX" ] && export TERM=xterm-256color

Use true color for tmux window decorations

Tmux gained support for displaying true color in version 2.2. Is there anyway to use true-color for the tmux window decorations? For example:
set -g window-active-style 'bg=#ffeedd'
Currently, tmux will pick the nearest color from a 256 color palette instead of the specified color.
This ability is present in Tmux source as of 2016-07-14. See https://github.com/tmux/tmux/issues/490
This commit explains your problem pretty much. To fix your problem you can do the following in your .tmux.conf:
set -ga terminal-overrides ",xterm-256color:Tc"
You may have to change xtemr-256color a bit, to match the terminal you're using.
Additional info for #sascha answer above, I added set-option -sa terminal-overrides ',xterm-256color:RGB' to .tmux.conf but it still doesn't work with true color. My outside terminal is Konsole and $TERM is xterm-256color.
Eventually I set set-option -sa terminal-overrides ',*:RGB' and it works.

Cannot get delete key to work with tmux and OSX

On OSX with tmux installed through homebrew I cannot seem to get my 'delete' key to work. I am using iterm2 and have my delete mapped to ^H. Without tmux the 'delete' key works fine.
To fix backspace on Apple M1 Pro OSX 12.4, tmux 3.3a
I had to do the following
brew install ncurses
$(brew --prefix)/opt/ncurses/bin/infocmp tmux-256color > ~/tmux-256color.info
tic -xe tmux-256color ~/tmux-256color.info
#https://github.com/tmux/tmux/issues/1257#issuecomment-581378716
#https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95
This might be some terminal emulation issue within your shell.
When you are in a tmux session, enter the following in the bash prompt and see if it works:
stty erase ^H
If this helps, check your terminal tty settings.
What worked for me is adding this to .tmux.conf.
# apps should know that this is 'screen' and not xterm. Slight compatibility
# reasons. tmux should be running in xterm-256colors, and set TERM so that
# applications within tmux see screen-256colors tmux does not support -bce
# (background color erase)
set -g default-terminal 'screen-256color'
I came across this and I found a solution for me.
Tmux uses ^? for delete. stty was not sending ^?.
I changed that using stty erase '^?' and then changed my preferences in iTerm2 for delete to send ^?
https://github.com/tmux/tmux/issues/335
I'm a few years late, but for me the problem was my $TERM setting ... changed it to screen-256color and that did the trick
Better solution here: https://gist.github.com/bbqtd/a4ac060d6f6b9ea6fe3aabe735aa9d95

Why am I seeing only 8 colors in terminal (xfce-terminal)?

I'm running Xubuntu 13.04 and I want to use Vim as my default editor for everything. I have downloaded many vim color schemas and tried them out, but all of them don't look like the official screenshot.
For example, vim's own color schema - desert should look like this:
But in my vim, many colors won't display, for example the background.
So this means a fighting with xfce's Terminal and I can't force it to use 256 colors.
the command tput colors gives me
8.
At the same time the code for ((x=0; x<=255; x++));do echo -e "${x}:\033[48;5;${x}mcolor\033[000m";done shows me nice colors. it seems i missed something. If I run
**$ echo $TERM**
I get xterm. It should be 'xterm-256color'
When I try
set term=xterm-256color
and
export TERM=xterm-256color
Then: echo $TERM
I get the message
xterm-256color.
But after signout/signup, I'm still not getting the right colors in Vim. And I see the Xterm is changed to xterm again.
I added:
if $TERM == "xterm-256color" set t_Co=256 endif
and
t_Co=256
to my .vimrc file and it didn't seem to help. Then I customized the xterm entries; added this to ~/.Xdefaults:
*customization: -color
XTerm*termName: xterm-256color
Add this to ~/.xsession to apply to new terminals:
if [ -f $HOME/.Xdefaults ]; then
xrdb -merge $HOME/.Xdefaults
fi
When I changed in preferences of terminal, emulate terminal environment, the 'xterm' to 'xterm-256color'
I get the message:
'*** VTE ***: Failed to load terminal capabilities from '/etc/termcap'
When I check /usr/share/vte/termcap/xterm, the file xterm-256color is missing. Same in folder xterm0.0. I tried to find this file on internet to download and put in the folder, but I couldn't find it.
This is driving me crazy the whole day... Have anyone suggestions?
Quick (Temporary) Way
Enter this whenever you open a new terminal:
export TERM=xterm-256color
Works for as long as the window is open.
Works-but-dirty Way
Append the line above to ~/.bashrc.
The problem with that, though, is that editing $TERM in .bashrc is a bad idea because doing that automatically makes any terminal using bash try to use it regardless of whether it actually supports 256 colors or not (like when SSH-ing or accessing the terminals with Ctrl+Alt+F1 to F6).
What I did, though is that since xfce4-terminal sets the $COLORTERM value to xfce4-terminal, I, instead appended the following to .bashrc:
if [ "$COLORTERM" == "xfce4-terminal" ] ; then
export TERM=xterm-256color
fi
That way, the relevant $TERM edit only happens if you're using xfce4-terminal, which just sets it to xterm anyway (and changing the emulation environment results in that "VTE" message).
References:
https://bbs.archlinux.org/viewtopic.php?id=175581
http://vim.wikia.com/wiki/256_colors_in_vim#Comments
http://promberger.info/linux/2008/04/05/getting-256-color-support-working-for-mutt-in-xfce4-terminal/
http://docs.xfce.org/apps/terminal/getting-started

Tmux window title keeps renaming

Suddenly, both my screen/tmux started changing my windows' names after every command. They keep changing the name to the value of $PROMPT_COMMAND on every single action on the terminal, even after manually renaming them (by Ctrl+A A on screen or Ctrl+B on tmux).
On tmux I already tried to change the tmux.conf settings to disable window auto renaming off, but seems that it was ignored.
I am using bash without the standard /etc/bashrc configuration file. My distro is Fedora 18.
Add the following to your tmux config file:
set-option -g allow-rename off
Put this at the end of the .tmux.conf file:
set-window-option -g automatic-rename off
set-option -g allow-rename off
then reload the tmux config file (ctrl + b > : > source-file ~/.tmux.conf).
First, if l0b0's answer fixed your problem could you please mark it as a solution? Second, for those of use who stumble upon this question and are using fedora 19 this redhat bug report may be of interest. It seems like the default value of $PROMPT_COMMAND set by /etc/bashrc has been changed recently. I reverted to the previous behavior like this:
echo 'printf "\033]0;%s#%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' > /etc/sysconfig/bash-prompt-screen
chmod a+rx /etc/sysconfig/bash-prompt-screen
Check whether your PS1 (plus PS2, PS3 or PS4 if those are set) is changing the title:
printf %q "$PS1" | grep -F '\\033'

Resources