Vimの構文強調表示は、Javaのラムダ(->)をエラーと見なします


25

Vimを使用してJava 8でプログラムしているのですが、構文の強調表示に問題があります。

Java 8の新機能はラムダサポートです。これにより、矢印演算子が作成されます->。Vimは、これを* .javaファイルの有効な演算子として認識しません。そのため、この演算子を明るい赤で強調表示して、「構文エラー」に注意を促しています。(もちろん、これは本当に有効な構文です。)

この問題を回避するために、許可された演算子のVimの「辞書」を更新したり、構文の強調表示を修正したりする方法はありますか?

最初の2行の:version状態:

VIM-Vi IMproved 7.4(2013年8月10日、2014年1月2日19:39:32にコンパイル)

含まれるパッチ:1〜52

回答:


32

2016年の更新

Vim構文ファイルは、v7.4.649(2015年3月)でこのために更新されました。したがって、このパッチがあれば、これを行う必要はありません。

これを修正する最も簡単な方法は、おそらく新しいsyntax/java.vimファイルをダウンロードして~/.vim/syntax/java.vim、デフォルトの設定を上書きするように設定することです$VIMRUNTIME/syntax/java.vimhtml.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同じルールからラムダ構文を除いたファイルを追加することにより、このルールをオーバーライドできます。

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
ザカリーマレー

4

デフォルトの構文ファイルを編集する必要はありません。VIM-のJavaプラグインは、このサポートしています。他のプラグインと同様にインストールするだけで、ラムダ演算子が正しく強調表示されます。


本気ですか?コードが表示されず、表示される唯一のコミットは、->「ラムダシンボルの場合はjavaErrorに一致しません」というメッセージでjavaErrorを削除するだけです(ただし、関数として強調表示を追加しません)。
マーティントゥルノイ

@Caspetsmokerそうですね。エラーメッセージを削除するだけです。しかし、私はこれが好きです。
adelarsq

2
ランタイムファイルは2015年3月に更新されましたが、リンク先のリポジトリには、この更新によって導入された多くの修正がありません。FYI :-)
マーティンTournoij

@Carpetsmokerナイス。期待どおりに動作しました。ありがとう=)
adelarsq
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.