Vim:当色彩方案改变时如何自动同步自定义语法高亮规则?

Vim:当色彩方案改变时如何自动同步自定义语法高亮规则?

我在用语音(可能不需要了解太多就可以回答我的问题,我只是提供这些信息以供参考)并且我已经设法为特定内容编写了一些自定义语法高亮规则。

首先,我使用模式行来告诉 vim 某个文件是 VOoM 大纲,我在这类文件的底部写了以下内容:

/* vim: set syntax=myvoom : */

第二,我有一个/home/用户/.vim/after/语法/myvoom.vim文件,以下是其中的一个片段:

syn match voomTag "^tags:.*"
hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red

在一些轮廓节点中我有如下行:

tags: foo, bar, baz

为了使搜索更容易,上面的语法高亮规则只显示具有自定义前景/背景的那些行。

这在默认配色方案下可以正常工作(:颜色方案在 vim 中返回‘默认’)。

当我想尝试自定义配色方案时(野马例如)并通过执行以下操作来更改它:颜色方案野马,我的标签行的语法高亮丢失了。

我想了解为什么会发生这种情况。

另外,我想了解如何在颜色方案更改时自动同步这些自定义语法规则(这些规则是通用的,不特定于某种颜色方案)。我是否必须在 myvoom.vim 文件中以某种方式明确检查这一点?比如查看哪种颜色方案处于活动状态并为不同的颜色方案设置自定义语法高亮规则,还是有更好的方法?

答案1

发生这种情况的原因在于:highlight clear(请参阅:help :highlight)命令,该命令通常是 colorscheme 执行的第一个命令之一。此命令会重置所有突出显示,从而消除自定义:highlight命令的效果。

:autocmd要解决此问题,您需要使用(参见help :autocmd)事件之一ColorScheme(参见:help ColorScheme),在加载新配色方案后执行命令。更改后您的命令myvoom.vim应如下所示:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red
augroup END

:augroup另请参阅上的帮助:help :augroup

如果您希望根据当前配色方案使用不同的高亮,请使用:highlight link命令(参见:help :highlight-link)而不是指定您自己的颜色。例如,将其链接到Error高亮组将如下所示:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi! link voomTag Error
augroup END

相关内容