vim-모드에 따라 상태 표시 줄 색상을 변경하는 가장 좋은 방법 변경하려고 시도하면서 vim 환경을 개선하려고했습니다. 나는 이것을

모드가 바뀔 때마다 vim 상태 표시 줄 색상을 변경하려고 시도하면서 vim 환경을 개선하려고했습니다.

나는 이것을 triend했습니다 : ( 여기 에서 찾았 습니다 )

    "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색상이 바뀌지 않습니다. 다른 모드를 수동으로 입력 한 경우에만 색상이 다시 변경됩니다.



답변

StatusLine강조 그룹을 동적으로 수정하는 것은 잘못된 접근법입니다. 이것은 colorscheme의 사전 설정을 재정의 하고 작동하지 않는 것 같습니다 (어쩌면 :redraw[status]도움 이 될 수는 있지만 더 추악한 구현이 될 것입니다).

Vim을 사용하면 상태 표시 줄 (심지어 다중)에서 %#HLname#기호 로 사용자 지정 강조 그룹을 지정할 수 있습니다 . 자세한 내용 :help 'statusline'을 참조하십시오. 'statusline'값을 동적으로 변경하거나 (상태 표시 줄마다 다른 색상을 사용할 수도 %!MyStatusLine()있음) 값 자체를 다시 평가하는 접근 방식을 사용할 수 있습니다.


답변