我在Vim语法高亮方面发现了一个有趣的边界案例。考虑以下来自公司Makefile的片段:
LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
上面的一行代码只是从给定的
LDSCRIPT
中删除双引号。语法上没有问题;make按预期运行,没有问题。问题在于,由于上述行只包含一个双引号,因此高亮规则错误地认为文件的其余部分是引用文本,并将其着色。对于简单的Makefile,这只是个不方便;但对于超过1KLOC的Makefile来说,这将成为真正的麻烦(特别是因为这个预处理过程接近文件顶部)。
问题是:是否有任何方法可以基于匹配某些给定正则表达式的行(例如
subst[ \t]*['"],.*
)禁用语法高亮或类似的东西?如果无法实现,是否有一种方法可以在保留上面的高亮的同时重新启动Vim的高亮处理?如果可能的话,我想避免对Makefile进行编辑,因为此脚本共享在许多部门之间。
我愿意编写/修改vimscript来实现这一点,但我以前没有做过这样的事情(至少不是到合理的程度)。任何提示、指针或其他有用的提示都将不胜感激。
:syntax sync minlines=1
:syntax sync fromstart
:syntax sync clear
似乎以上任何操作都没有影响编辑器中的高亮显示。通过查看 Vim 帮助文档,发现 :syn-sync-fourth
可能能够实现我想要的功能,但是我不确定如何以相反的方式运行它(例如禁用高亮而不是应用它)。