Vim의 활성 창에만 배경색을 설정하는 방법은 무엇입니까?

Vim의 활성 창에만 배경색을 설정하는 방법은 무엇입니까?

작지만 시각적으로 즐거운 기능이자 약간의 유용성을 추가하는 기능으로 Vim이 활성 창에 대해 다른 배경색을 사용하도록 하고 싶습니다.

내가 추구하는 것에 대한 스케치는 다음과 같습니다.

여기에 이미지 설명을 입력하세요

일반적으로 해당 vim의 배경은 모두 검은색이지만 활성 창에만 사용자의 주의를 끌 수 있는 고유한 색상이 있는 경우도 있습니다. 상태 표시줄만 강조 표시하는 것만으로는 충분하지 않습니다!

답변1

Heptite님, 아이디어 감사드립니다.

WinEnter 및 WinLeave autocmd를 교체하여 각 줄 앞에 줄 번호를 추가/제거했습니다.

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set number
    autocmd WinLeave * set nonumber
augroup END

이제 어느 창이 활성화되어 있는지 추적하는 것이 더욱 세련되었습니다.

답변2

기본 배경색을 제어하는 ​​하이라이트 그룹은 " Normal" 및 " NonText"입니다. 안타깝게도 이는 "전역" 하이라이트이므로 창별로 "현지화"할 수 없습니다.

그러나 다음은 정말 추악한 예시입니다.

augroup BgHighlight
    autocmd!
    하이라이트 ActiveWindow guibg=lightblue
    autocmd WinEnter * call matchadd('ActiveWindow', '.*', 10, 1682)
    autocmd WinLeave * call matchdelete(1682)
augroup END

doautocmd BgHighlight WinEnter -

이는 단지 예일 뿐이므로 guibg=...와 함께 ctermbg=... 강조 표시를 추가하는 등 개별 요구 사항에 맞게 수정해야 합니다.

단점은 전체 줄/창이 아닌 파일에 있는 기존 텍스트의 배경만 강조 표시한다는 것입니다. (내가 말했듯이, 추악하고 투박합니다.)

답변3

저도 같은 것을 찾고 있었는데 (이번 호를 통해) 발견했습니다https://github.com/vim/vim/issues/2686) 이는 이제 wincolor(https://vimhelp.org/options.txt.html#%27wincolor%27) 옵션은 로컬(setl)로 설정할 수 있으므로 이를 vimrc에 추가했습니다.

" different color depending on focus
hi NormalNC ctermbg=234
augroup winbg
    autocmd!
    au WinEnter * setl wincolor=
    au WinLeave * setl wincolor=NormalNC
augroup END

이는 나에게 이러한 결과를 제공합니다(예, 나는 매우 큰 차이를 찾고 있지 않지만 그것이 모든 것을 변화시킨다는 것을 믿으십시오).

여기에 이미지 설명을 입력하세요

답변4

@Tshirtman이 제공한 솔루션을 추가하여 해당 사용자 정의를 이것으로 수정했는데 분할 창 간에 전환하는 동안 매우 멋져 보였습니다(동일한 내용 공유).

    hi NormalNC ctermbg=236 ctermfg=102
    augroup winbg
        autocmd!
        au WinEnter * setl wincolor= syn=on
        au WinLeave * setl wincolor=NormalNC syn=off
    augroup END

관련 정보