Vim:从任意行重新启动语法高亮
我发现了Vim语法突出显示的一个有趣的边缘案例。 考虑一下公司Makefile的以下片段:
LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
上面的代码只是删除给定LDSCRIPT
中的双引号。 没有语法错误; 制造按预期运行,没有问题。
问题
由于上面的行只包含一个双引号,所以突出显示规则错误地认为Makefile的其余部分是引用文本并为其着色。 对于简单的Makefiles,这是一个不便之处; 对于1KLOC + Makefiles,这成为一个真正的麻烦(特别是因为这个预处理靠近文件的顶部)。
问题
有什么办法可以禁用基于匹配某些给定正则表达式的行的语法高亮显示(例如subst[ t]*['"],.*
)或类似的东西吗?失败了,是否有某种方法可以重新启动Vim的突出显示在某些任意路线上,同时保留上面的亮点?
如果可能的话,我想避免对Makefile进行编辑,因为这个脚本在多个部门之间共享。
我愿意编写/修改vimscript来达到这个目的,但是我之前没有这样做(在任何合理的程度上)。 任何提示,指针或其他有用的提示将不胜感激。
我试过的
:syntax sync minlines=1
:syntax sync fromstart
:syntax sync clear
在编辑器中运行时,上述内容似乎都不会对突出显示产生任何影响。 通过Vim帮助文档,看起来:syn-sync-fourth
可能能够完成我之后的操作,但是我不确定这将如何以相反的方式运行(例如禁用突出显示而不是应用它)。
我认为你可以做的最好的做法是添加一个额外的语法规则(在~/.vim/after/syntax/make.vim
)以匹配违规结构。 这似乎工作:
syn match makeIgnore /subst[ t]*['"],,/ containedin=makeIdent
containedin=
是必需的,因为它在$(...)
构造中使用。
上一篇: Vim: Restart Syntax Highlighting from Arbitrary Line
下一篇: How do I modify a Boolean LDAP Active Directory attribute using Net::LDAP?