我没有在color xxx中放入.vimrc。因此,当我第一次打开我的.vimrc时,我会看到这个。

:color在这里给我default


然后输入:color darcula。然后它变成了这个。

:color在这里(自然地)给了我darcula

:set background=dark在这里给我:color(非常好)。


所以我的问题是,default到底是做什么的?

我尝试过:set background=dark,但没有发现任何帮助。我知道这个命令实际上并不会改变背景,只有vim会相应地改变颜色。但是我仍然想问这个问题。因为我对:h background:color darcula之后的颜色真的很满意,所以我想知道如何编写自己的配色方案而不必在我的:set background=dark中放入set background=dark

我从@statox咨询并在我的.vimrc的最后一行。然后,set background=dark给了我第三张屏幕截图。但是,当我将其放在第一行时,darcula.vim给了我第二张屏幕截图。 color darcula还将其更改为第三张屏幕截图。通过将它放在最后一行,对比之下,我让vim假定此颜色方案是为浅色背景设计的,然后让vim自己更改其中的一些颜色(当它处理最后一行时)。

如果我假设发生的事情是真的,那么我的问题仍然没有答案。

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

评论

为什么:set bg = dark和:set bg = light的顺序重要的可能重复项?

@muru问候!我问我之前已经读过这个问题。在那篇文章中提到:set bg = light和:set bg = dark不是相反的,但是没有解释它们的确切含义。那篇文章也是为什么我要避免在.vimrc中使用:set background = dark的原因。
有趣的是,在今天更新为“ vim-runtime-8.2.0100-1”之后,我不得不在Manjaro(Arch)中进行了设置,因为更新后突然语法发生了变化

#1 楼

当您使用:set background



时,会发生什么情况:set background起作用的基本机制实际上非常简单,并且
:help 'background'中对此文件进行了记录(尽管不是特别清楚)。

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


因此,更改'background'选项时实际上会发生以下情况:被认为适用于
'background'新设置的前景色

如果当前正在加载配色方案

Vim将重新加载配色方案。加载配色方案时,
配色方案将设置适合于'background'新设置的颜色,或者
配色方案将'background'重置为旧值。

前面已经介绍过,'background'选项不是用来设置背景的,而是用来通知Vim背景是暗还是浅的。 'background',Vim用它来表示
,该配色方案根本不支持'background'的新设置。
由于用户已指示他们使用了这样的背景,这意味着
当前颜色方案不再适用,因此Vim会取消设置
g:colors_name,然后重新加载默认的颜色。可以从这里开始。

安装中发生了什么

您描述的奇怪行为(在问题的第一个版本中)可以
在上面引用的文档中的以下行中进行解释: >
加载配色方案(设置了“ g:colors_name”变量)后,问题是您的'background'文件未设置该值,并且
所以即使调用colors/darcula.vim时颜色发生变化,Vim
也不认为当前正在加载颜色方案。在上面的“如果当前未加载任何配色方案”部分中,并设置深色背景的默认
颜色。这解释了为什么:color darcula然后报告
:set background=dark

(但是,请注意,设置默认颜色不会像您期望的那样删除
所有以前的颜色设置,这就是为什么最终得到的结果是
,而不是最初
启动Vim时显示的颜色。对此问题进行了一些讨论
此处)

简而言之,您的配色方案配置错误:请参见:color(特别是底部的部分)
有关此内容以及default与颜色之间的相互作用的更多详细信息/>方案。

评论


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

–马云
17年8月7日,下午2:36

#2 楼

:h 'background'上的文档
应提供您需要的所有信息:


设置为“暗”时,Vim会尝试使用看起来很漂亮的颜色黑暗的背景。当设置为“浅”时,Vim将尝试使用在浅色背景上看起来很好的颜色。其他任何值都是非法的。


您的颜色方案定义了两组颜色:用于浅色背景的颜色
和用于深色背景的颜色。 background选项将告诉vim
应使用由您的配色方案定义的颜色组。 >背景颜色是什么样的。有关更改背景颜色的信息,请参见:h :hi-normal

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


这是上一段的后续内容:就是通过colorcheme定义颜色组和background选择这些组之一。

最后,如果您想编写自己的配色方案而不必将set background=dark放入vimrc中,请记住,colorscheme只不过是vimscript中的程序,所以没有停止您可以直接在您的colorcheme的代码中使用命令,例如软糖或学徒

评论


谢谢!我将set background = dark放在darcula.vim中,并产生了与将其放在.vimrc中时相同的效果。但是我仍然很好奇,Vim如何“尝试使用在深色背景上看起来不错的颜色”?是否在某处定义了映射或类似的定义?

–马云
17年4月18日在2:43

#3 楼

设置“背景”可调整UI高亮组(*highlight-groups*)的默认颜色,并将标准语法高亮组(*group-name*)重置为设置背景的默认颜色,因此必须在语法高亮命令之前设置它以防止覆盖。如果没有在.vimrc或启动时加载的单独的colorcheme文件中明确设置,vim会通过查询背景颜色自行设置。有效值为'light'和'dark'。

#4 楼

Vim只是使用术语颜色,如果在暗黄色上配置了某些东西,则Vim会在更改背景模式时将其更改为黄色。

所有颜色代码为:

如果使用RGB代码进行配置,则不会更改。
因此,最好使用最大术语颜色。暗模式或亮模式以及我的术语颜色