我最近添加了以下代码$MYGVIMRC
(多年来一直没有改变并且运行良好),以便我的 Windows 10 上的 GVIM(8.2)根据一天中的时间自动切换背景:
fun! s:set_bg(timer_id)
let hour = strftime('%H')
let value = ((hour > 6 && hour < 18) ? 'light' : 'dark')
if !(value == &background)
let &background = value
endif
endfun
call timer_start(15 * 60 * 1000, function('s:set_bg'), { 'repeat': -1 })
call s:set_bg(0)
它工作正常,只是在 PC 从睡眠状态唤醒时,我通常运行的 Solarized 配色方案的颜色全都乱了。在我添加上述代码之前不会发生这种情况(s:set_bg
如您所见,该代码每 15 分钟调用一次,以评估背景是否需要切换),但在我添加它之前,什么都没有定期运行,以下是 的内容$MYGVIMRC
:
set guicursor=a:blinkoff200-blinkon2000
set guifont=Iosevka_Term:h14
set guioptions-=L
set guioptions-=l
set guioptions-=m
set guioptions-=R
set guioptions-=r
set guioptions-=T
set guioptions-=t
set renderoptions=type:directx
colorscheme solarized
fun! s:set_bg(timer_id)
let hour = strftime('%H')
let value = ((hour > 6 && hour < 18) ? 'light' : 'dark')
if !(value == &background)
let &background = value
endif
endfun
call timer_start(15 * 60 * 1000, function('s:set_bg'), { 'repeat': -1 })
call s:set_bg(0)
必须注意的是,我在 GVIM 中倾向于保持打开的缓冲区,和我的$MYGVIMRC
和颜色方案定义文件(solarized.vim
)位于网络安装卷(网络驱动器)上,唤醒 PC 后网络短暂不可用,因为管理 Windows 域的组织启用了直接访问(VPN),这需要一些时间才能重新连接上述网络驱动器。
有人能帮忙解释一下这里可能发生了什么吗——为什么我的配色方案会搞乱?我想网络驱动器短暂不可用这一事实应该没有什么可说的,因为它至少$MYGVIMRC
在启动时加载一次,并且它包含的所有脚本都保存在内存中?
答案1
当值发生变化时,更改整个第三方配色方案的能力:help 'background'
是一种黑客行为,它与另一个内置黑客行为相冲突,后者旨在将默认配色方案调整为终端仿真器的背景颜色。
我的假设是,由于网络延迟,$VIMRUNTIME/syntax/syncolor.vim
您的配色方案用来监听&background
更改的任何内容都是在执行之后产生的,因此会覆盖您的某些配色方案的样式。