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
#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代码进行配置,则不会更改。
因此,最好使用最大术语颜色。暗模式或亮模式以及我的术语颜色
评论
为什么: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)中进行了设置,因为更新后突然语法发生了变化