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

Я пытался улучшить свой опыт 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+=%{ChangeStatuslineColor()} 

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

1 ответ

Решение

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

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

Другие вопросы по тегам