如何仅为 Vim 的活动窗口设置背景颜色?

如何仅为 Vim 的活动窗口设置背景颜色?

这是一个虽小但视觉上令人愉悦的功能,并且稍微增加了可用性,我想让 Vim 对活动窗口使用不同的背景颜色。

以下是我所追求的草图:

在此处输入图片描述

通常情况下,vim 会将所有背景设为黑色,但如果活动窗口有自己的颜色来突出显示用户的注意力就好了。仅突出显示状态栏是不够的!

答案1

Heptite,谢谢你的想法。

我只需替换 WinEnter 和 WinLeave 自动命令即可在每行前面添加/删除行号:

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

现在跟踪哪个窗口处于活动状态更加时尚。

答案2

控制默认背景颜色的高亮组是“ Normal”和“ NonText”。遗憾的是,这些是“全局”高亮,无法根据每个窗口进行“本地化”。

然而,这是一个真正丑陋、笨拙的例子:

augroup BgHighlight
    autocmd!
    突出显示 ActiveWindow guibg=lightblue
    autocmd WinEnter * 调用 matchadd('ActiveWindow', '.*', 10, 1682)
    autocmd WinLeave * 调用 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

相关内容