vim - Какой лучший способ установить цвет строки состояния для изменения в зависимости от режима

826
rossijonas

Я пытался улучшить свой опыт vim, пытаясь изменить цвет строки состояния vim при каждом изменении режима.

Я сочинил это: (найдено здесь )

 "Automatically change the statusline color depending on mode function! ChangeStatuslineColor() if (mode() =~# '\v(n|no)') exe 'hi! StatusLine ctermfg=008' elseif (mode() =~# '\v(v|V)' || g:currentmode[mode()] ==# 'V·Block' || get(g:currentmode, mode(), '') ==# 't') exe 'hi! StatusLine ctermfg=005' elseif (mode() ==# 'i') exe 'hi! StatusLine ctermfg=004' else exe 'hi! StatusLine ctermfg=006' endif  return '' endfunction 

... и включают в себя:

set statusline+=% 

Но есть проблема: если вы переключитесь в insertрежим, а затем нажмете, чтобы Escвернуться в normalрежим, цвет не изменится. Он изменит цвет только тогда, когда вы вручную войдете в другой режим.

3

1 ответ на вопрос

0
Ingo Karkat

Динамическое изменение StatusLineгруппы выделения - неправильный подход. Это переопределяет любые предустановки вашей схемы цветов и, похоже, не работает (может быть, добавление a :redraw[status]поможет, но это сделает реализацию еще более уродливой).

Vim позволяет указать пользовательскую группу подсветки в строке состояния (даже несколько) с %#HLname#символом. Смотрите :help 'statusline'подробности. Вы можете либо динамически изменить 'statusline'значение (это также позволяет использовать разные цвета для разных строк состояния), либо использовать %!MyStatusLine()подход, который переоценивает само значение.

Спасибо за этот ответ! Кажется, действительно лучшее решение. Я получу мою голову на этом, спасибо rossijonas 6 лет назад 0

Похожие вопросы