Почему статусные строки не имеют цвета после изменения цветовой схемы? - PullRequest
0 голосов
/ 09 июля 2020

Мой vimr c выложен внизу. Я не использовал плагины, относящиеся к статусной строке. Этот файл может нормально работать. Но когда я меняю цветовую схему с помощью командной строки, например ": цветовая схема вечера" В строке состояния отсутствует цвет. Ресурс vimr c может исправить ошибку, например ": source $ HOME_vimr c". Та же ошибка произошла в windows10 и при тестировании Debian.

Это ошибка?

colorscheme desert
"""""""""""""""""
set laststatus=2
""""""""""""""""""
function! InsertStatuslineColor(mode)
if a:mode == 'i'
  hi statusline guibg=red
elseif a:mode == 'r'
  hi statusline guibg=blue
else
  hi statusline guibg=black
endif
endfunction
au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi statusline guibg=orange guifg=white
hi statusline guibg=gray guifg=black
""""""""""""""""""
set statusline=
set statusline +=%4*%n%m%r%h%w%*
set statusline +=%F
set statusline +=%=%1*[%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]
set statusline +=[%2*%Y%1*]
set statusline +=[%2*%03v:%03l%1*/%3*%L(%p%%)%1*]
hi User1 guifg=gray
hi User2 guifg=green
hi User3 guifg=white
hi User4 guifg=red
hi User5 guifg=#a0ee40

1 Ответ

3 голосов
/ 09 июля 2020

Не баг, а фича. Любая «цветовая схема» Vim - это просто файл VimScript, который в 99,99% случаев начинается с команды

hi clear

И, как вы можете догадаться, hi clear отменяет действие всех предыдущих команд :hi, включая ваше :hi UserN ...

Таким образом, вы должны либо

  1. Trap colorscheme, чтобы переопределять UserN каждый раз при изменении цветовой схемы;

  2. Или используйте только стандартные цветовые группы (%#name#), которые, надеюсь, определены в каждой цветовой схеме. Список см. В :h highlight-groups.

Конечно, в последнем случае ваша строка состояния будет выглядеть немного по-другому в разных цветовых схемах.

...