如何在Vim语法高亮中着色函数调用

5
我是新手Vim用户,想知道如何在函数定义后突出显示函数调用。例如,在SublimeText版本中,当totalForArray被定义时为绿色,在第12行调用时也是绿色的。这是我的Vim外观imgur.com/q2WMQ4d,我想知道如何使totalForArray在被调用时突出显示。
3个回答

5
Vitor的正则表达式匹配有所改进。这将突出显示嵌套的函数调用,同时尊重关键字如whileiffor等的高亮显示,并允许在函数名和括号之间添加空格,例如:myFunction (int argc) { ... }
syn match dFunction "\zs\(\k\w*\)*\s*\ze("
hi link dFunction Function

我尝试将它们放在我的.vimrc文件中,但它们在那里无法工作,所以我将它们移动到了.vim/after/syntax/go.vim文件中(如果您使用其他语言,请使用相应的文件名,如c.vimcpp.vim)。 - VinGarcia

2
Vim的语法解析通常只会给函数定义着色,因为使用正则表达式很容易定位。对于函数调用,它需要维护一个检测到的函数列表。
有一些插件可以使用这样的列表扩展语法高亮,通常从标签数据库中获取。例如,easytags.vim插件可以通过:HighlightTags命令执行自动标签更新并突出显示它们。

我以前用过 \<\w\+(,效果还不错。但是在大文件上可能会变慢,不过能解决问题。 - Vitor
@Ingo-Karkat 谢谢,我已经下载了 easytags 插件(以及 vim-misc 和 exuberant ctags),现在我可以跳转到函数定义了,但不幸的是,我认为语法高亮在 JavaScript 文件上不起作用,而这是我大部分时间所使用的。 - andyroo
@Vitor 我应该把 \<\w\+( 放在哪里? - andyroo
尝试将以下内容添加到您的vimrc中:syn match myFunction "\<\w\+\ze("。@IngoKarkat,您能否请审核此建议?谢谢。 - Vitor
@Vitor:是的,在大多数情况下,这将起作用(除非被另一个语法组遮盖)。不过,它与我的答案不同,因为它会突出显示所有函数,无论是否已知。 - Ingo Karkat

2
作为对@Ingo所提出的建议的更简单的替代方案,您还可以定义一种语法来匹配任何直接跟随括号的关键字:
syn match jsFunction "\<\k\+\ze("
hi link jsFunction Function

在Github上搜索后,我也找到了一个名为vim-javascript的插件,它似乎具有包含在Vim中的默认Javascript语法的各种扩展。尤其是,它包含以下语法定义:
syntax match jsFuncCall /\k\+\%(\s*(\)\@=/

这将实现我之前描述的相同的语法高亮,但是通过使用此插件,您可能还可以从其中包含的其他改进中受益。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接