The idea is that by using set termguicolors
in Vim, I should get the colorscheme (gruvbox) to look in my terminal (st
, has true color support) exactly like in GVim. But all I get is white text on black background.
The part in vimrc which sets the colorscheme:
set background=dark
colorscheme gruvbox
set termguicolors
You might read :h xterm-true-color
.
I'm using st
as well, and indeed, setting termguicolors
gave me black and white colors only.
But by following the advice in the help, I added the following:
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
Then colors appeared again. Hope it can help.
Here is the whole excerpt from :h xterm-true-color
:
Vim supports using true colors in the terminal (taken from |highlight-guifg| and |highlight-guibg|), given that the terminal supports this. To make this work the 'termguicolors' option needs to be set. See https://gist.github.com/XVilka/8346728 for a list of terminals that support true colors.
Sometimes setting 'termguicolors' is not enough and one has to set the |t_8f| and |t_8b| options explicitly. Default values of these options are "^[[38;2;%lu;%lu;%lum" and "^[[48;2;%lu;%lu;%lum" respectively, but it is only set when
$TERM
isxterm
. Some terminals accept the same sequences, but with all semicolons replaced by colons (this is actually more compatible, but less widely supported):let &t_8f = "\<Esc>[38:2:%lu:%lu:%lum" let &t_8b = "\<Esc>[48:2:%lu:%lu:%lum"
These options contain printf strings, with |printf()| (actually, its C equivalent hence
l
modifier) invoked with the t_ option value and three unsigned long integers that may have any value between 0 and 255 (inclusive) representing red, green and blue colors respectively.