The problem is that there are various scenarios in which Vim will reload the colour scheme such as using `:colorscheme` or `:syntax enable`. Colour schemes should always start with `:highlight clear` to clear all existing highlight groups. Why? See what happens when you do: :highlight Test ctermfg=red :highlight Test ctermbg=blue What is `Test` now set to? ----------- To fix this, you should always hook in to the `ColorScheme` autocommand when you define highlight groups: fun! s:highlight() highlight Foo ctermbg=red endfun augroup myplugin_highlight autocmd! autocmd ColorScheme * call s:highlight() augroup end call s:highlight() I used a function because we want to run this *both* on startup *and* when the `ColorScheme` autocommand is fired. It's a bit ugly, but it's the only way.