我正在使用Vim在Java 8中编程,语法突出显示时遇到了问题。
Java 8的一项新功能是lambda支持,从而创建了箭头运算符->。 Vim在* .java文件中不能将其识别为有效的运算符。这样,它以亮红色突出显示此运算符,以引起对“语法错误”的注意。 (当然,这确实是有效的语法。)
有没有办法更新Vim允许的运算符的“字典”和/或修复语法突出显示以避免此问题?
:version的前两行状态:

VIM-Vi IMproved 7.4(2013年8月10日,2014年1月2日19:39:32编译)
包含的修补程序:1-52


#1 楼

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部分?这会导致错误突出显示。

您可以通过添加[^-]->文件(
,该文件具有相同的模式减去lambda语法)来覆盖此规则:

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



为了获得奖励积分,我们可以添加以下行来突出显示此功能:

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


考虑提交错误报告。 ~/.vim/after/syntax/java.vim解释了如何。似乎有更多(新?)结构被突出显示为错误,例如:help bug-reports中的...

评论


奖励积分的匹配不检查是否启用了java_highlight_functions。如果您对一致性不满意,则可能应该在syn match调用之前进行检查:if exist(“ java_highlight_functions”)| syn匹配javaFuncDef“ [^-]->” |万一

–扎卡里·默里(Zachary Murray)
15年7月14日在23:25



#2 楼

无需编辑默认语法文件。 vim-java插件对此提供了支持。像其他任何插件一样进行安装,lambda运算符将正确突出显示。

评论


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

–马丁·图尔诺伊(Martin Tournoij)
16-3-22在18:56

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

–adelarsq
16 Mar 23 '16 at 14:10

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

–马丁·图尔诺伊(Martin Tournoij)
16 Mar 23 '16 at 14:18

@Carpetsmoker不错。确实按预期工作。谢谢=)

–adelarsq
16 Mar 23 '16 at 14:28