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

Editor Vimscript-以编程方式从colorscheme获取颜色,editor,vim,Editor,Vim,我正在尝试在Vimscript中创建一个autocmd,它根据需要设置colorscheme的一些属性。具体来说,我试图使非文本背景与常规背景具有相同的颜色 问题是,我不知道如何从vimscript中获取colorscheme的背景色 有人有什么想法吗 编辑: 这就是我想要实现的目标。实际上有几件事: 最初,我试图隐藏所有不存在的行前面的“~”。有人建议将其设置为与背景相同的颜色,因此我添加了一个autocmd来实现这一点:hi NonText guifg=bg 这样做之后,我意识到一些Col

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

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

有人有什么想法吗

编辑:

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

  • 最初,我试图隐藏所有不存在的行前面的“~”。有人建议将其设置为与背景相同的颜色,因此我添加了一个autocmd来实现这一点:
    hi NonText guifg=bg

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

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

  • 最后,我试图了解vim颜色方案的一般情况,因为我计划编写一个插件,它需要一些其他技巧,比如从方案中计算颜色

    hi NonText guibg=bg
    
    怎么样


    在OP澄清后编辑:

    好的,让我们从头开始。现在,我会暂时搁置插件的编写,直到您获得基本Vim设置和语言的许可。这些字符(其中一个是您试图隐藏的
    ~
    )称为列表字符,可以在
    列表字符
    选项中定义。您可以通过
    设置列表字符?
    查看您的内容。它们也可以通过
    设置列表
    /
    设置列表
    打开/关闭(我的意思是可见或不可见),或通过
    设置列表
    打开/关闭


    非文本
    突出显示组是“覆盖”这些字符显示的组,但实际上打开/关闭这些字符的方法是通过设置,而不是通过覆盖该组的背景/前景颜色。因此,我最初对你的意图感到困惑。还有一个突出显示组
    SpecialKey
    ,您可能也会发现它很有趣,因为它涵盖了一些案例。

    这里有两种方法:

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

    将以
    “#rrggbb”
    (仅在终端中
    “N”
    )的形式向变量
    bgcolor
    ,或
    -1
    赋值(如果未为此组定义背景)。您可以使用此命令来构造
    :hi
    命令(常规背景应在
    正常
    组中定义)

  • 只用

    hi link NonText Ignore
    
    。除非您的配色方案重新定义了
    忽略
    组,使其实际显示,否则它将正常工作


  • 我试过类似的东西。事实上,我有一个autocmd可以这样做:hi NonText guifg=bg。但据我所知,它将gui前景(gui FG)设置为同一行的背景,即非文本背景。我错过什么了吗?现在我想起来了,我不知道“bg”是在哪里定义的…@edanmar-但是为什么要设置“hi NonText guifg=bg”?如果要关闭非文本,请使用“set nolist”或“set invlist”进行切换。在任何情况下,“hi NonText guibg=bg”都将设置非文本backgr。恢复到正常背景。“背景”分别是普通背景和前景。不过,我必须承认,我有点困惑,你想用这个来完成什么。我不确定invlist到底是什么。我将编辑我的问题以添加我的目标。我认为OP想要知道的可以表达为:如何获取给定突出显示组属性的当前值?当然,您可以使用
    :hi NonText
    ,但这只是列出它。他真的希望在变量中有值,在VimScript中使用它
    hi link NonText Ignore