- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Vim 语法高亮中发现了一个有趣的边缘情况。考虑公司 Makefile 中的以下片段:
LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
上面的行只是从给定的 LDSCRIPT
中删除双引号。语法上没有错误; make 按预期运行并且没有问题。
问题
由于上面的行仅包含一个双引号,因此突出显示规则错误地认为 Makefile 正文的其余部分是引用文本并将其着色。对于简单的Makefile来说,这是一个不便;对于 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:从任意行重新启动语法突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26763084/
有没有一种方法可以“标记”对象的属性,使它们在反射中“突出”? 例如: class A { int aa, b; string s1, s2; public int AA
我是一名优秀的程序员,十分优秀!