状态行中的反色。为什么?

时间:2016-04-05 14:35:15

标签: vim

我在Windows上使用gvim 7.4,干净安装,没有插件。任何人都可以解释一下,为什么:

highlight statusline guifg=red guibg=green

将在红色背景上显示绿色文字。

但是这个:

highlight statusline gui=NONE guifg=red guibg=green

会在绿色背景上显示红色文字吗?

(实际目标是将状态行中的文本从粗体更改为正常。对于此任务,我添加了gui=NONE然后,看到这种奇怪的行为。)

修改

(正如我对肯特评论的回答)

这是我完整的_vimrc。代码上只有两行:

set laststatus=2
highlight statusline gui=NONE guifg=red guibg=green

也尝试过:

  • hihighlight
  • 的效果相同
  • StatusLinestatusline
  • 的效果相同

2 个答案:

答案 0 :(得分:4)

要检查hi-group是如何定义的,在vim中使用:hi GroupName,这就是为什么我一直要求OP和Carpetsmoker提供他们的cmd输出。

编译并安装vim后,已经定义了一些默认的HL-Groups。

人们不时询问默认配色方案。并希望扩展“默认”配色方案。在linux盒子上很容易找到该位置,例如,它位于/usr/share/vim/vim74/colors/default.vim,不同的发行版可能有不同的路径。

但是,如果我们打开default.vim,我们会看到一个相当简单的vim文件。没有任何HL定义。因为它们在vim源代码中是默认定义的。

关于StatusLine组,它在syntax.c文件中定义:

https://github.com/vim/vim/blob/8bc189e81aa98ba4aebb03a9dc9527a210fce816/src/syntax.c#L6784

我们可以看到reverse位于StatusLineStatusLineNC组中。

要摆脱反向“功能”,您必须覆盖guicterm属性。

答案 1 :(得分:2)

这是因为默认StatusLine是:

:hi StatusLine
  StatusLine     xxx term=bold,reverse cterm=bold,reverse gui=bold,reverse

请注意reversecterm中的gui关键字?这告诉它使用反向视频。

这也是您使用gui=NONE(或gui=bold)时所期望的颜色的原因。

  

hi与高亮显示效果相同

hi只是highlight的缩写版本。