Vim自定义语法高亮显示:如何高亮显示存储函数的变量(CoffeScript)?

Vim自定义语法高亮显示:如何高亮显示存储函数的变量(CoffeScript)?,vim,coffeescript,syntax-highlighting,Vim,Coffeescript,Syntax Highlighting,我想突出显示CoffeScript代码中的函数名: hightlight = -> hightlight = (args) -> 不包括以下内容: noHighlight -> noHighlight = key: 如何使用自定义Vim语法声明来实现这一点?您需要找出导致突出显示的语法组:syn list显示所有活动组,但安装插件时更容易 如果您正在使用的语法脚本提供了一个专用的语法组(名为coffeeFunction),那么更改突出显示就像放置 :highligh

我想突出显示CoffeScript代码中的函数名:

hightlight = ->

hightlight = (args) ->
不包括以下内容:

noHighlight ->

noHighlight =
  key:

如何使用自定义Vim语法声明来实现这一点?

您需要找出导致突出显示的语法组<代码>:syn list显示所有活动组,但安装插件时更容易

如果您正在使用的语法脚本提供了一个专用的语法组(名为
coffeeFunction
),那么更改突出显示就像放置

:highlight link coffeeFunction Function

进入您的
~/.vimrc
。如果没有专门的组,则必须扩展语法脚本(或要求脚本作者执行)。挑战在于新定义必须与其他定义相适应(特别是关于
contained=…
关系。您也可以搜索不同的语法脚本。哎呀,Vim目前没有附带CoffeeScript语法脚本,因此可能会有几个相互竞争的版本。

我是这样做的。假设您有Vim coffee脚本,您应该编辑它的
语法/coffee.Vim(例如,如果您使用的是病原体,请使用
~/.vim/bundle/vim coffee script/syntax/coffee.vim

添加以下内容:

syn region coffeeFunction start=/\S\s*[a-zA-Z0-9_]\+ = \((.*) \)\?->/ end=// oneline transparent
syn match coffeeFunctionName /\S\s*[a-zA-Z0-9]\+ / contained containedin=coffeeFunction
hi def link coffeeFunctionName Identifier
这将以与高亮显示类方法相同的方式高亮显示函数定义


这绝对不是完美的,因为这是我第一次使用Vim的语法突出显示,但它对我很有效。大的黑客使用
syn region
而不是
syn match
,因为后者会覆盖现有语法,我不知道如何防止这种情况发生。

目前没有突出显示,我想创建吗吃了它。谢谢。不确定哪种选择更好,但我就是这么做的:
syn match coffeeFunctionDefinition“\v\w+\ze\s*[:=][^\-]+\->”