La coloration syntaxique de Vim considère un lambda (->) en Java comme une erreur

25

J'utilise Vim pour programmer en Java 8 et j'ai un problème avec la coloration syntaxique.

Une nouvelle fonctionnalité Java 8 est lambda support, ce qui a donné lieu à la création de l'opérateur de flèche: ->. Vim ne reconnaît pas cela comme un opérateur valide dans un fichier * .java. En tant que tel, il met en évidence cet opérateur en rouge vif pour attirer l'attention sur «l'erreur de syntaxe». (Bien sûr, c'est vraiment une syntaxe valide.)

Existe-t-il un moyen de mettre à jour le "dictionnaire" de Vim des opérateurs autorisés et / ou de corriger la coloration syntaxique pour éviter ce problème?

Les deux premières lignes d' :versionétat:

VIM - Vi IMproved 7.4 (10 août 2013, compilé le 2 janvier 2014 19:39:32)

Patchs inclus: 1-52

apnorton
la source

Réponses:

32

Mise à jour 2016

Le fichier de syntaxe Vim a été mis à jour pour cela dans la version 7.4.649 (mars 2015); donc si vous avez ce patch, vous n'avez pas besoin de le faire.

Le moyen le plus simple de résoudre ce problème est probablement de télécharger le fichier le plus récentsyntax/java.vim et de le placer ~/.vim/syntax/java.vimafin qu'il remplace la valeur par défaut $VIMRUNTIME/syntax/java.vim. Vous devrez également créer html.vimun lien symbolique pour que cela fonctionne en java.vimfonction de cela:

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

Réponse originale

Mon /usr/share/vim/vim74/syntax/java.vima ceci:

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

Voir la [^-]->partie? Cela provoque l'erreur de mise en évidence.

Vous pouvez remplacer cette règle en ajoutant un ~/.vim/after/syntax/java.vimfichier, avec le même modèle moins la syntaxe lambda:

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

Et pour les points bonus, nous pouvons ajouter cette ligne pour mettre cela en évidence en fonction:

syn match javaFuncDef "[^-]->"

Pensez à déposer un rapport de bogue. :help bug-reportsexplique comment. Il semble y avoir plus de (nouvelles?) Constructions qui sont mises en évidence comme une erreur, comme le ...in public static void main(String... args).

Martin Tournoij
la source
1
La correspondance des points bonus ne vérifie pas si elle java_highlight_functionsa été activée. Si vous êtes névrosé au sujet de la cohérence, vous devriez probablement le vérifier avant l' syn matchappel: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray
4

Il n'est pas nécessaire de modifier le fichier de syntaxe par défaut. Le plugin vim-java prend en charge cela. Installez simplement comme n'importe quel autre plugin et l'opérateur lambda sera mis en surbrillance correctement.

adelarsq
la source
Êtes-vous sûr? Parce que je ne vois aucun code pour cela, et le seul commit que je vois ne supprime que ->de javaError avec le message "Ne pas faire correspondre javaError si c'est un symbole lambda" (mais n'ajoute pas de surbrillance en tant que fonction).
Martin Tournoij
@Caspetsmoker Vous avez raison. Supprime simplement le message d'erreur. Mais je préfère comme ça.
adelarsq
2
Je constate que les fichiers d'exécution ont été mis à jour en mars 2015 btw, et que le référentiel auquel vous liez n'a pas beaucoup de correctifs que cette mise à jour introduit. Pour info :-)
Martin Tournoij
@Carpetsmoker Nice. A fonctionné comme prévu. Merci =)
adelarsq