gpt4 book ai didi

Vim:从任意行重新启动语法突出显示

转载 作者:行者123 更新时间:2023-12-03 05:01:24 25 4
gpt4 key购买 nike

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com