:set background = dark有什么作用?


35

我没有投入color xxx我的.vimrc。所以我第一次打开我的笔记本时看到了.vimrc

:color给我default在这里。 在任何事情之前

然后我输入:color darcula。它改变为此。

:colordarcula(自然地)给我在这里。 改变颜色

然后我输入:set background=dark。它改变为此。

:color给我default(令人惊讶)。 换背景

所以我的问题是,究竟是做:set background=dark什么的?

我尝试过:h background,没有发现任何帮助。我知道该命令实际上并不会改变背景,只有vim会相应地改变颜色。但是我仍然想问这个问题。因为我用的颜色真的很高兴后:color darcula:set background=dark所以我不知道怎么写我自己的配色方案,而不必把set background=dark我的.vimrc

我从@statox那里得到了建议,并放在set background=dark了我的最后一行darcula.vim。然后color darcula给了我第三张截图。但是,当我将其放在第一行时,color darcula给了我第二张屏幕截图。还将其set bg=dark更改为第三个屏幕截图。

我假设将其放在第一行,是告诉vim这种颜色方案是为深色背景设计的。通过对比,将其放在最后一行,让vim假定此颜色方案是为浅色背景设计的,然后让vim自己更改其中的某些颜色(当它处理最后一行时)。

如果我假设发生的事情是真的,那么我的问题仍然没有答案。vim到底发生了什么变化,当我使用set bg=dark后加载了浅色方案时?

我的整个vim配置位于https://github.com/MichaelMa2014/.vim



@muru问候!我问我之前已经读过这个问题。在那篇文章中提到了:set bg=light:set bg=dark不是相反的,但是没有解释它们的确切含义。那个帖子也是为什么我想避免出现:set background=dark在我的文章中.vimrc
Michael Ma

Answers:


32

当你会发生什么 :set background

工作的基本机制:set background实际上非常简单,并且在中进行了记录(尽管不是特别清楚):help 'background'

设置“背景”后,Vim会为新值调整默认颜色组。但是用于语法突出显示的颜色不会改变。 g:colors_name
加载配色方案(设置了“ g:colors_name”变量)后,设置“ background”将导致重新加载配色方案。如果配色方案调整为“背景”值,则将起作用。但是,如果配色方案本身设置了“背景”,则效果可能会消失。

因此,'background'更改选项后实际发生的情况是:

如果当前未加载任何配色方案

Vim使用被认为适合于新设置的前景色重新加载默认颜色。 'background'

如果当前加载了配色方案

Vim重新加载配色方案。加载配色方案后,要么配色方案设置适合于的新设置'background'的颜色,要么配色方案重置 'background'为旧值。

正如您已经描述的那样,该'background'选项并不是要设置 背景,而是要通知 Vim背景是暗还是亮。

因此,如果重置配色方案'background',Vim将此表示配色方案根本不支持的新设置'background'。由于用户已经指示他们正在使用这样的背景,这意味着当前的配色方案不再适用,因此Vim会取消设置 g:colors_name,然后重新加载默认的颜色。

如果您想探索'background'设置时运行的实际代码,可以从此处开始

您的安装中发生了什么

您描述的奇怪行为(在问题的第一个版本中)可以通过上面引用的文档中的以下行来解释:

加载配色方案时(设置了“ g:colors_name”变量)

问题是您的colors/darcula.vim文件没有设置该值,因此即使您在调用时更改了颜色:color darculaVim也不认为当前会加载颜色方案。

因此,在调用:set background=darkVim 时,请执行上面“如果当前未加载任何配色方案”部分中的步骤,并为深色背景设置默认颜色。这解释了为什么:color随后报告 default

(但是请注意,该设置默认的颜色不,如你所料,删除所有以前设置的颜色,这就是为什么你最终看到的结果,而不是所显示的颜色,当你首先启动Vim。这里有关于此问题的一些讨论

简而言之,您的配色方案配置错误:有关:edit $VIMRUNTIME/colors/README.txt此主题'background'以及配色方案之间的交互作用的更多详细信息,请参见(尤其是底部的部分)。


非常感谢!当您说“没有如您所料,不会删除所有先前设置的颜色”时,我感到完全理解。我一定会去阅读讨论的!
Michael Ma

4

的doc :h 'background' 应该提供您需要的所有信息:

设置为“深色”时,Vim会尝试使用在深色背景上看起来不错的颜色。当设置为“ light”时,Vim会尝试使用在浅色背景上看起来不错的颜色。任何其他值都是非法的。

您的colorcheme定义了2组颜色:用于浅色背景的颜色和用于深色背景的颜色。该background选项将告诉vim应该使用您的colorscheme定义的哪组颜色。

设置此选项不会更改背景颜色,它会告诉Vim背景颜色是什么样。有关更改背景颜色的信息,请参见:h :hi-normal

设置“背景”后,Vim会为新值调整默认颜色组。但是用于语法突出显示的颜色不会改变。

这是上一段的后续内容:这是Colorscheme,它定义颜色的组并background选择这些组中的一个。

最后,如果您想编写自己的配色方案而不必放入set background=darkvimrc,请记住,colorscheme只不过是vimscript中的程序,因此没有什么阻止您直接在colorcheme的代码中使用该命令,例如jellybeans学徒


1
谢谢!我把set background=darkdarcula.vim和生产的,当我把它放在同样的效果.vimrc。但是我仍然很好奇,Vim如何“尝试使用在深色背景上看起来不错的颜色”?是否在某处定义了映射或类似的定义?
Michael Ma
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.