vim用特定字符自己突出显示

Iwi*_*ghT 5 syntax vim highlight keyword

我希望我的vim用红色突出显示Pouet组中的一些关键字,例如.c文件中的'if('。我想出了如何突出显示if:

syn keyword Pouet if
Run Code Online (Sandbox Code Playgroud)

(这是我的〜/ .vim / syntax / c.vim)

highlight Pouet term=NONE cterm=NONE Ctermfg=160 ctermbg=NONE gui=NONE
Run Code Online (Sandbox Code Playgroud)

(这是我的.vimrc的一部分)

问题是,此代码不适用于特殊字符(例如'('或一个空格或许多空格)。我的​​问题是:如何使类似'if('的句子以红色突出显示?

谢谢

Ing*_*kat 4

:syn keyword仅适用于关键字字符(由'iskeyword'设置定义),并且(通常不包含。

你必须改用:syn match,例如:

:syn match Pouet "\<if("
Run Code Online (Sandbox Code Playgroud)

如果您自己定义语法,这很好。如果你除了现有的C语法高亮之外还想要这个,你需要分析原始语法组并添加诸如 之类的东西containedin=cConditional,也许你甚至必须修改原始语法定义。

另一种选择是matchadd(),它位于语法突出显示之上:

:call matchadd('Pouet', '\<if(')
Run Code Online (Sandbox Code Playgroud)

这里的问题是这些匹配是窗口本地的,不像语法突出显示那样绑定到文件类型,因此当您拆分窗口或在当前窗口中编辑另一个文件类型时,突出显示将消失/将持续。这些问题可以通过 autocmd 解决,但现在变得非常复杂。