2012-03-28 39 views
3

我正在尝试在Vimscript中创建一个autocmd,它根据我的需要设置了一些colorscheme的属性。具体来说,我试图让NonText背景具有与常规背景相同的颜色。Vimscript - 以编程方式从colorscheme获取颜色

问题是,我不知道如何从vimscript中获取colorscheme的背景颜色。

任何人有任何想法?

编辑:

所以这里就是我想要的目的。其实有几件事:

  1. 最初,我试图隐藏所有不存在的行前面的“〜”。有人建议将它设置为与背景相同的颜色,所以我添加了一个autocmd,它可以做到这一点:hi NonText guifg=bg

  2. 之后,我意识到一些colorschems对于常规线条和缓冲区的“不存在”部分具有不同的背景颜色。这是一个问题,因为我的autocmd将NonText的颜色设置为与常规背景相同,而不是特殊的“不存在”背景。

    此外,我决定,即使没有整个“摆脱~”的问题,我不喜欢它,当缓冲区的不存在的部分是不同的颜色。

最后,我想了解一般VIM colorschemes,因为我打算写一个插件,将需要一些其他的小把戏,比如从方案搞清楚的颜色。

回答

5

这里有两种方法:

  1. 使用hi NonText。当然不是一个人,而是:redir。我不会详细描述它,因为我个人不喜欢任何使用:redir的解决方案(它们是:1.需要解析2.没有嵌套的重定向3.无法知道重定向是否处于活动状态)。
  2. 使用synIDattr()hlID()

    let bgcolor=synIDattr(hlID('NonText'), 'bg#') 
    

    如果背景是不是这个组定义将分配在形式"#rrggbb"(只是在终端"N")的东西,可变bgcolor,或-1。您可以使用它来构造:hi命令(定期背景应在Normal组中定义)。

  3. 只需使用

    hi link NonText Ignore 
    

    。除非您的颜色方案已重新定义Ignore组,以便它实际上显示为

1
hi NonText guibg=bg 

那怎么样?澄清从OP后


编辑:

奥基,让我们从一开始走。现在,我暂时将一个插件的写入暂时搁置了一段时间,直到您熟悉基本的Vim设置和语言。其中一个字符是您要隐藏的~,它们被称为列表字符,它们可以在listchars选项中定义。你可以通过set listchars?看到你的。它们也可以通过set list/set nolist打开/关闭(我的意思是可见或不可见),或者用set invlist打开/关闭。

NonText突出显示组是“覆盖”这些字符的显示,但实际上打开/关闭它们的方式是通过设置,而不是通过覆盖该组的背景/前景色。因此,我最初的意图混淆了你的意图。还有一个突出组SpecialKey,您可能还会感兴趣,因为它涵盖了一些情况。

+0

我试过类似的东西。实际上,我有一个autocmd这样做:\t hi NonText guifg = bg。但据我所知,它将gui前景(guifg)设置为同一行的背景,即NonText背景。我错过了什么吗?现在我想到了,我不知道“bg”是在哪里定义的...... – 2012-03-28 17:13:57

+0

@EdanMaor - 但是为什么要设置“hi NonText guifg = bg”?如果你想关闭NonText,那么“设置nolist”或“设置invlist”来切换它。无论如何,“hi NonText guibg = bg”将设置NonText背景。到正常背景。 “bg”分别是Normal背景和fg前景。 – Rook 2012-03-28 17:24:14

+0

虽然,我必须承认,对于你想要完成的一般事情,我有点困惑。 – Rook 2012-03-28 17:25:11