Vim的语法突出显示将Java中的lambda(->)视为错误


25

我正在使用Vim在Java 8中编程,并且语法高亮出现了问题。

Java 8的一项新功能是lambda支持,从而创建了arrow运算符:->。Vim在* .java文件中不能将其识别为有效的运算符。因此,它以亮红色突出显示此运算符,以引起对“语法错误”的注意。(当然,这确实是有效的语法。)

有没有一种方法可以更新Vim允许的运算符的“词典”和/或修复语法突出显示以避免此问题?

前两行:version状态:

VIM-Vi IMproved 7.4(2013年8月10日,2014年1月2日19:39:32编译)

包含的修补程序:1-52

Answers:


32

2016年更新

Vim语法文件已在v7.4.649(2015年3月)中更新。因此,如果您有此补丁程序,则无需执行此操作。

解决此问题的最简单方法是下载较新的syntax/java.vim文件并将其放入,~/.vim/syntax/java.vim以便覆盖默认文件$VIMRUNTIME/syntax/java.vim。您还需要html.vim基于此链接进行符号链接才能起作用java.vim

ln -s /usr/share/vim/vim74/syntax/html.vim ~/.vim/syntax/

原始答案

/usr/share/vim/vim74/syntax/java.vim有这个:

syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/"

看到[^-]->零件了吗?这会导致错误突出显示。

您可以通过添加~/.vim/after/syntax/java.vim文件来重写此规则,该文件应使用相同的模式减去lambda语法:

syn clear javaError
syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|\*\/"

对于奖励积分,我们可以添加以下行以突出显示此功能:

syn match javaFuncDef "[^-]->"

考虑提交错误报告。:help bug-reports解释如何。似乎有更多(新?)结构被突出显示为错误,例如...in public static void main(String... args)


1
奖励积分的匹配不检查是否java_highlight_functions已启用。如果您对一致性不满意,可以在syn match通话之前进行检查: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray

4

无需编辑默认语法文件。该VIM的Java插件支持这个功能。像其他任何插件一样进行安装,lambda运算符将正确突出显示。


你确定吗?因为我看不到任何代码,而且我看到唯一提交->仅从javaError中删除了带有消息“如果它是lambda符号则不匹配javaError”的javaError(但未将突出显示作为函数添加)。
马丁·图尔诺伊

@Caspetsmoker你是对的。只是删除错误消息。但是我喜欢这样。
adelarsq '16

2
我看到运行时文件已于2015年3月更新,并且您链接到的存储库没有此更新引入的许多修复程序。仅供参考:-)
马丁·图尔诺伊

@Carpetsmoker不错。确实按预期工作。谢谢=)
adelarsq '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.