我正在尝试在Vimscript中创建一个autocmd,它根据我的需要设置了colorscheme的一些属性。具体来说,我试图让NonText
背景与常规背景颜色相同。
问题是,我不知道如何从vimscript中获取colorscheme的背景颜色。
有人有什么想法吗?
修改
所以这就是我想要实现的目标。实际上有一些事情:
最初,我试图隐藏所有不存在的线前面的“〜”。有人建议将其设置为与背景相同的颜色,因此我添加了一个执行此操作的autocmd:hi NonText guifg=bg
。
在这样做之后,我意识到一些colorschems对于常规行和缓冲区的“不存在”部分具有不同的背景颜色。这是一个问题,因为我的autocmd将NonText颜色设置为与常规背景相同,而不是特殊的“不存在”背景。
另外,我决定即使没有整个“摆脱~
”问题,当缓冲区的不存在部分是不同的颜色时,我也不喜欢它。
最后,我正在尝试了解一般的vim colorschemes,因为我打算编写一个插件,需要一些其他技巧,比如从方案中找出颜色。
答案 0 :(得分:6)
这里有两种方法:
hi NonText
。当然,并不是唯一的,而是:redir
。我不会更详细地描述它因为我个人不喜欢任何使用:redir
的解决方案有很多原因(它们是:1。需要解析2.没有嵌套重定向3.无法知道重定向是否是活性)。使用synIDattr()
和hlID()
:
let bgcolor=synIDattr(hlID('NonText'), 'bg#')
如果没有为此论坛定义背景,会将"#rrggbb"
(终端中只有"N"
)的内容分配给变量bgcolor
或-1
。您可以使用它来构造:hi
命令(应在Normal
组中定义常规背景)。
只需使用
即可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
,您可能也会感兴趣,因为它涵盖了一些情况。