I’ve been around the houses on this problem long enough, and after many years of trying various tricks and having them fail I decided to document an actual working solution.
- Install a terminal that has good colour support (e.g. Alacritty)
- Install a better Vim (i.e. Neovim) †
† This should still work with standard Vim, but actually Neovim has so many performance improvements, and quality of life plugins it’s not worth fighting for purity (trust me, I had been using standard vim and the standard macOS terminal app for 10 years before admitting I was fighting the tide).
Now that you have the right tools, let’s explain the configuration.
" this will tell Neovim to enable 24bit true color if (has("termguicolors")) set termguicolors endif
# this isn't necessary when using Neovim in an appropriate terminal, # but it will help when running Neovim inside of tmux. export TERM="xterm-256color"
set-option -g default-terminal 'screen-256color-bce' set-option -ga terminal-overrides ",xterm-256color:Tc"
The tmux manual states that
default-terminal should be set to
tmux or a derivative of them, which is why this doesn’t get set to the same value (
TERM has in the
Additionally, we use the
-bce suffix (rather than just setting
screen-256color) because otherwise tmux won’t use a transparent background. Having a transparent background allows the terminal colour palette to be utilised and this helps Vim themes to display correctly.
terminal-overrides let’s you configure tmux to know about terminal capabilities it otherwise might not be able to detect by itself. So this is why we set it to the same value (
TERM has in the
But before we wrap up... time (once again) for some self-promotion 🙊