Vim:根据时间设置颜色/主题

37

我有一台那种超级光滑的显示器,在白天,我能够看到自己的倒影比暗黑色主题上的代码更清晰。所以我想如果我可以有一个简单的if开关在我的vimrc中,根据时间设置暗黑或明亮的主题,那就太好了。

可惜的是,我不太了解vimrc语法,并且搜索结果也不理想。

有人愿意尝试一下吗?


澄清一下:您想让背景根据您启动vim会话的时间更改,还是在您使用vim时更改(时钟敲响中午,您的背景是不同的颜色)? - rampion
我对前者感到满意,但如果你能想出后者的话,那将会很棒。 - Jonathan Dumaine
7个回答

58

以下类似的代码应该能解决问题:

if strftime("%H") < 12
  set background=light
else
  set background=dark
endif

显然,您应该根据自己的需求选择小时


你也可以通过在设置背景行后添加另一行来轻松更改颜色方案,例如“colorscheme doodle”或任何适用于浅色/深色背景的喜爱颜色方案。 - Kevin
1
使用三元运算符::let &background = strftime("%H") < 17 ? "light" : "dark" - SergioAraujo
如果strftime(“%H”)> = 5 && strftime(“%H”)<18,则更好。 - Amith

5
尝试使用werewolf.vim插件:

Werewolf根据时间自动更改vim配色方案,让您在白天使用浅色主题,但一旦太阳落山,它会“转换”为暗色主题。

如果您经常使用不同的配色方案,可以设置多个浅色/暗色配色方案对,并且它将自动切换到匹配的方案。

4
这不是一个严格的 Vim 回答,但你可以尝试安装 f.lux ,它会根据时间调整你的显示器颜色。这里有一个 演示 。白天会有温暖的黄色光芒,晚上则是蓝色的。免责声明:我自己没有尝试过(但我很心动)。

1
我现在已经使用它一段时间了。一开始有点奇怪,但如果你在冬天白天短的时候工作,并且靠近台灯...它还是能用的。就像我说的,有点奇怪,但不知怎么的我喜欢它。 - Rook

3

我知道这是一个老问题,并且已经有了一个被接受的答案,但如果你想使用lua而不是vimscript来实现相同的功能,以下是我的解决方法。

local hr = tonumber(os.date('%H', os.time()))
if hr > 6 and hr < 21 then -- day between 6am and 9pm
  vim.opt.background = 'light'
else -- night
  vim.opt.background = 'dark'
end


请注意,本答案假设您的首选颜色方案支持浅色深色背景。

1
您可以在vimrc中引用.vimrc.local。然后,您可以使用cron根据时间覆盖该文件。无需脚本 :-)

1

我的night-and-day插件是一个“vim主题调度器”。您可以将一天分成任意数量的时间段,并为每个时间段分配一个主题。如果在新的时间段开始时打开了vim,则主题将自动更改。


插件存储库现在已经存档在GitHub中。如果不再受支持,最好避免使用它。 - mokagio

0
我已经想到了另一种改变颜色和背景的方法。
exe 'colo' ((strftime('%H') % 18) >= 6 ? 'gruvbox' : 'kolor')
exe 'set background='. ((strftime('%H') % 18) >= 6 ? 'light' : 'dark')

使用除法的余数可以更好地控制我想要改变背景的时间。我们可以使用这个 shell 循环来查看原因:

for ((i=1;i<=23;i++)){
 echo "Rest of dividing $ i by 18 equal to:  $(( $i % 18 ))"
}

如果我使用类似<14的东西,而不是除法的余数,那么在午夜之后我的颜色方案会变成“浅色”。因此,我将小时的除法余数与6进行比较。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接