vim-모드에 따라 상태 표시 줄 색상을 변경하는 가장 좋은 방법


3

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

답변:


0

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

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


이 답변에 감사드립니다! 실제로 더 나은 솔루션 인 것 같습니다. 감사합니다
rossijonas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.