Как установить цвет фона только для активного окна Vim?

Как установить цвет фона только для активного окна Vim?

Небольшая, но визуально приятная функция, немного повышающая удобство использования. Мне бы хотелось, чтобы Vim использовал другой цвет фона для активного окна.

Вот набросок того, что мне нужно:

введите описание изображения здесь

Обычно этот vim имел бы весь фон черным, но если бы только активное окно имело свой собственный цвет, чтобы привлечь внимание пользователя. Выделения только строки состояния недостаточно!

решение1

Хептит, спасибо за идею.

Я просто заменяю автокоманды WinEnter и WinLeave для добавления/удаления номеров строк перед каждой строкой:

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

Теперь стало более стильно отслеживать, какое окно активно.

решение2

Группы подсветки, которые управляют цветом фона по умолчанию, — это « Normal» и « NonText». К сожалению, это «глобальные» подсветки, и их нельзя «локализовать» для каждого окна.

Однако вот действительно уродливый и неуклюжий пример:

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

doautocmd BgHighlight WinEnter -

Поскольку это всего лишь пример, вам придется изменить его в соответствии с вашими индивидуальными потребностями, например, добавив подсветку ctermbg=... вместе с guibg=...

Недостатком является то, что это выделит только фон существующего текста в файлах, а не всю строку/окно. (Как я уже сказал, некрасиво и неаккуратно.)

решение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

Связанный контент