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

Eda*_*aor 5 vim editor

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

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

有人有主意吗?

编辑:

所以这就是我想要实现的目标.实际上有几件事:

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

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

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

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

ZyX*_*ZyX 6

这里有两种方法:

  1. 使用hi NonText.:redir当然,并非一个人,而是一个人.我不会更详细地描述它,因为我个人不喜欢使用任何解决方案:redir有很多原因(它们是:1.需要解析2.没有嵌套重定向3.无法知道重定向是否有效).
  2. 使用synIDattr()hlID():

    let bgcolor=synIDattr(hlID('NonText'), 'bg#')
    
    Run Code Online (Sandbox Code Playgroud)

    将表格中的内容"#rrggbb"(仅"N"在终端中)分配给变量bgcolor,或者-1如果没有为该组定义背景.您可以使用它来构造:hi命令(应在Normal组中定义常规背景).

  3. 只是用

    hi link NonText Ignore
    
    Run Code Online (Sandbox Code Playgroud)

    .工作,除非你的色彩方案重新定义Ignore组,以便它实际上显示.