Skip to content

Instantly share code, notes, and snippets.

@andersevenrud
Last active September 10, 2024 07:45
Show Gist options
  • Save andersevenrud/015e61af2fd264371032763d4ed965b6 to your computer and use it in GitHub Desktop.
Save andersevenrud/015e61af2fd264371032763d4ed965b6 to your computer and use it in GitHub Desktop.
True Color (24-bit) and italics with alacritty + tmux + vim (neovim)

True Color (24-bit) and italics with alacritty + tmux + vim (neovim)

This should make True Color (24-bit) and italics work in your tmux session and vim/neovim when using Alacritty (and should be compatible with any other terminal emulator, including Kitty).

Testing colors

Running this script should look the same in tmux as without.

curl -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh >24-bit-color.sh
bash 24-bit-color.sh

colors

Configuration files

⚠️ IMPORTANT ⚠️ Don't set $TERM in your shell (zshrc, bashrc, etc.), but your terminal (alacritty).

Alacritty

In ~/.config/alacritty/alacritty.yml:

env:
  TERM: xterm-256color

tmux

In ~/.tmux.conf (or ~/.config/tmux/tmux.conf):

set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"

# Or use a wildcard instead of forcing a default mode.
# Some users in the comments of this gist have reported that this work better.
#set -sg terminal-overrides ",*:RGB"

# You can also use the env variable set from the terminal.
# Useful if you share your configuration betweeen systems with a varying value.
#set -ag terminal-overrides ",$TERM:RGB"

vim

In ~/.vimrc:

" You might have to force true color when using regular vim inside tmux as the
" colorscheme can appear to be grayscale with "termguicolors" option enabled.
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

syntax on
set termguicolors
colorscheme yourfavcolorscheme

neovim

If you use ~/.vimrc for your nvim configuration, use the above vim example because it's fully compatible.

💡 neovim recently (Dec 6th 2023) merged some changes that detects termguicolors automatically, so there's no need to set this in an upcoming release. I'll update this notice with a version once released as a public version. This came with the 0.10 release (May 16th 2024).

In ~/.config/nvim/init.vim

set termguicolors
colorscheme yourfavcolorscheme

Or ~/.config/nvim/init.lua:

vim.o.termguicolors = true
vim.cmd'colorscheme yourfavcolorscheme'

Not working correctly ?

Check out the comments below for possible solutions.

And if you found another solution I would really appreciate if you left a comment with instructions and the following information:

  • OS/Distro + version
  • Vim or Neovim + version
  • Terminal name + version

Mentions

Shout-out to the nice folks that provided insightful feedback:

@mikeslattery
Copy link

mikeslattery commented Dec 22, 2021

If vim goes to black and white when setting termguicolors, you may need to add this:

let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"

This isn't a problem with neovim.

@andersevenrud
Copy link
Author

@mikeslattery Thanks! I was able to reproduce this. Updated the gist with information :)

@oxodao
Copy link

oxodao commented Jan 3, 2022

THANK YOU. I've tried making this work for years in termite, then alacritty and this FINALLY WORKS.

@mikeslattery
Copy link

@andersevenrud , @oxodao I'm glad to help in my small way.

I think this could make a useful dual (n)vim/tmux plugin (a la vim-tmux-navigator), esp if it were verified to work with other popular combinations (e.g. iterm2, gVim).

@xlsama
Copy link

xlsama commented Jan 20, 2022

Thank you!

@chiendo97
Copy link

Thank you!

@bkachinthay
Copy link

Thanks!

@kaiguogit
Copy link

Thank you very much.

@sittim
Copy link

sittim commented Feb 22, 2022

My home brew updated the terminal to Version 0.10.1 and it stopped working :(

@mawkler
Copy link

mawkler commented Feb 23, 2022

Thank you! TERM: xterm-256color was the last piece to the puzzle for me to get it to work properly!

@guilhermehto
Copy link

Thanks g!

@orafaelfragoso
Copy link

I'm using Lunar Vim + NeoVim and it's not working for Lunar.
If I open nvim it works, but not lvim.

@mjcc30
Copy link

mjcc30 commented Mar 23, 2022

I'm using Lunar Vim + NeoVim and it's not working for Lunar. If I open nvim it works, but not lvim.

same for me

@mikeslattery
Copy link

@mjcc30 @orafaelfragoso LunarVim config is kept in a different directory. Read LunarVim's docs. You can't expect OP to support LunarVim, btw.

@chiguiredev
Copy link

chiguiredev commented Mar 24, 2022

I had to set it to

set -g default-terminal "alacritty"
set -ag terminal-overrides ",alacritty:RGB"

OS: macos
Terminal: alacritty
Neovim

@creep33
Copy link

creep33 commented Apr 7, 2022

Thanks!

@sahibalejandro
Copy link

sahibalejandro commented Apr 13, 2022

The only thing I needed to do was to add set -ag terminal-overrides ",alacritty:RGB" to my .tmux.conf file, nothing else.

macOS v12.3.1
NVIM v0.6.1
alacritty v0.10.1

@mikeslattery
Copy link

mikeslattery commented Apr 13, 2022

@sahibalejandro I am guessing that works with Neovim but not Vim.

My experience with Neovim is that more things like this "just work"(tm). Personally, I'm sticking with the original config here as other true-color terminal apps I may install (if any) will be more likely to behave correctly.

@rnmp
Copy link

rnmp commented Apr 19, 2022

Thank you! Life saver.

@nmdra
Copy link

nmdra commented May 6, 2022

Thanks, Man, You saved my life…!!

image

@kotajacob
Copy link

Amazing! Thank you!

@harushinogen
Copy link

Thank You!

@sebastianvera
Copy link

This is what worked for me:

alacritty.yml

env:
  TERM: xterm-256color

.tmux.conf

set -g default-terminal 'xterm-256color'
set -as terminal-overrides ',xterm*:Tc:sitm=\E[3m'

Thank you!

@S1ro1
Copy link

S1ro1 commented Jun 18, 2022

This was the only thing that worked for me too, arch linux

@pipewire-debian
Copy link

@nmdra May we get your .dotfiles ?
Thank you.

@eug-L
Copy link

eug-L commented Jun 27, 2022

Thank you!!

@udithvb
Copy link

udithvb commented Jun 30, 2022

Thank you!!

@iamteem
Copy link

iamteem commented Jul 3, 2022

Thank you! 🍷

@imsuck
Copy link

imsuck commented Jul 18, 2022

Thank you!

@sahibalejandro
Copy link

I recently discovered that you can use ENV variables inside your tmux.conf so you can have something like:

set -ag terminal-overrides ",$TERM:RGB"

This is useful in the case you're sharing (like me) your tmux.conf between computers and the value of $TERM is different for each one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment