Vimscript - 以编程方式从colorscheme获取颜色

时间:2012-03-28 16:47:28

标签: editor vim

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

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

有人有什么想法吗?

修改

所以这就是我想要实现的目标。实际上有一些事情:

  1. 最初,我试图隐藏所有不存在的线前面的“〜”。有人建议将其设置为与背景相同的颜色,因此我添加了一个执行此操作的autocmd:hi NonText guifg=bg

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

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

  3. 最后,我正在尝试了解一般的vim colorschemes,因为我打算编写一个插件,需要一些其他技巧,比如从方案中找出颜色。

2 个答案:

答案 0 :(得分:6)

这里有两种方法:

  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
    

    。除非您的colorscheme重新定义了Ignore组,否则它将显示

答案 1 :(得分:1)

hi NonText guibg=bg

那怎么样?


在OP澄清之后编辑:

哦,我们从一开始就走吧。现在我要暂时写一个插件,直到你掌握了基本的Vim设置和语言。字符(其中一个是您要隐藏的~)是所谓的列表字符,可以在listchars选项中定义。你可以通过set listchars?看到你的内容。它们也可以通过set list / set nolist打开/关闭(可见或不可见),或者使用set invlist打开/关闭。

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