모드가 바뀔 때마다 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()
있음) 값 자체를 다시 평가하는 접근 방식을 사용할 수 있습니다.