I am trying to use vimdiff as my git merge tool, but the colors used are making it unbearable (at least on Windows/Mingw): the background color and the foreground color is the same for some of the conflicting lines, making it needlessly hard to figure out what is going on (see the lines below containing include=
).
4 Answers
The colors are controlled by these four highlight groups (:help hl-DiffAdd
):
DiffAdd diff mode: Added line
DiffChange diff mode: Changed line
DiffDelete diff mode: Deleted line
DiffText diff mode: Changed text within a changed line
These are typically defined by a color scheme, but you can customize them in your ~/.vimrc
(after the :colorscheme
command) if you like you scheme overall, just not its diff highlighting. Just redefine using :highlight
. Here are my personal customizations (for GVIM; for the terminal you need the appropriate ctermfg/bg=...
attributes instead / in addition):
hi DiffAdd gui=none guifg=NONE guibg=#bada9f
hi DiffChange gui=none guifg=NONE guibg=#e5d5ac
hi DiffDelete gui=bold guifg=#ff8080 guibg=#ffb0b0
hi DiffText gui=none guifg=NONE guibg=#8cbee2
If you're switching colorschemes on the fly, you need to re-invoke those :hi
commands via :autocmd ColorScheme * hi ...
-
6A note for Neovim users confused why these highlight groups aren't working, you have to use
diffAdded
,diffChanged
, anddiffRemoved
. Not sure what the nvim alternative toDiffText
is - maybediffLine
? Apr 28, 2020 at 14:07
One quick fix is to disable syntax highlighting. Sometimes the code syntax highlighting will cause the foreground text to be the same color as the vimdiff background color, making the text "invisible".
:syntax off
If you want to automatically do this for vimdiff, then add this to the end of your ~/.vimrc
:
if &diff
syntax off
endif
Extending Ingo Karkat's solution to terminal,
hi DiffAdd ctermfg=NONE ctermbg=Green
hi DiffChange ctermfg=NONE ctermbg=NONE
hi DiffDelete ctermfg=LightBlue ctermbg=Red
hi DiffText ctermfg=Yellow ctermbg=Red
Below are the cterm-colors
, if you want to add your preferred color instead of the ones I used.
NR-16 NR-8 COLOR NAME
0 0 Black
1 4 DarkBlue
2 2 DarkGreen
3 6 DarkCyan
4 1 DarkRed
5 5 DarkMagenta
6 3 Brown, DarkYellow
7 7 LightGray, LightGrey, Gray, Grey
8 0* DarkGray, DarkGrey
9 4* Blue, LightBlue
10 2* Green, LightGreen
11 6* Cyan, LightCyan
12 1* Red, LightRed
13 5* Magenta, LightMagenta
14 3* Yellow, LightYellow
15 7* White
-
1
Another quick (perhaps even lazy) fix is to just do something like:
:colo desert
This will change your color scheme, and in some cases will make hidden text become visible.
-
2
-
2