Die Syntaxhervorhebung von Vim betrachtet ein Lambda (->) in Java als Fehler


25

Ich verwende Vim zum Programmieren in Java 8 und habe ein Problem mit der Syntaxhervorhebung.

Ein neues Feature in Java 8 Lambda - Unterstützung, die bei der Schaffung des Pfeils Betreibers geführt: ->. Vim erkennt dies nicht als gültigen Operator in einer * .java-Datei. Daher wird dieser Operator hellrot hervorgehoben, um auf den "Syntaxfehler" hinzuweisen. (Natürlich ist dies wirklich eine gültige Syntax.)

Gibt es eine Möglichkeit, Vims "Wörterbuch" der zulässigen Operatoren zu aktualisieren und / oder die Syntaxhervorhebung zu korrigieren, um dieses Problem zu vermeiden?

Die ersten beiden :versionStaatslinien:

VIM - Vi IMproved 7.4 (10. August 2013, kompiliert am 2. Januar 2014, 19:39:32 Uhr)

Enthaltene Patches: 1-52

Antworten:


32

Update 2016

Die Vim- Syntaxdatei wurde hierfür in Version 7.4.649 (März 2015) aktualisiert . Wenn Sie diesen Patch haben, müssen Sie dies nicht tun.

Der einfachste Weg, dies zu beheben, besteht wahrscheinlich darin, die neuere syntax/java.vimDatei herunterzuladen und dort abzulegen, ~/.vim/syntax/java.vimdamit die Standarddatei außer Kraft gesetzt wird $VIMRUNTIME/syntax/java.vim. Sie müssen auch einen Symlink erstellen, html.vimdamit dies funktioniert. java.vimDies hängt davon ab:

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

Ursprüngliche Antwort

Mein /usr/share/vim/vim74/syntax/java.vimhat folgendes:

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

Sehen Sie den [^-]->Teil? Dadurch wird der Fehler hervorgehoben.

Sie können diese Regel außer Kraft setzen, indem Sie eine ~/.vim/after/syntax/java.vimDatei mit demselben Muster abzüglich der Lambda-Syntax hinzufügen :

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

Und für Bonuspunkte können wir diese Zeile hinzufügen, um dies als Funktion hervorzuheben:

syn match javaFuncDef "[^-]->"

Erwägen Sie, einen Fehlerbericht einzureichen. :help bug-reportserklärt wie. Es scheint mehr (neue?) Konstrukte zu geben, die als Fehler hervorgehoben werden, wie das ...in public static void main(String... args).


1
Der Abgleich für die Bonuspunkte überprüft nicht, ob java_highlight_functionsaktiviert wurde. Wenn Sie in Bezug auf Konsistenz neurotisch sind, sollten Sie dies wahrscheinlich vor dem syn matchAnruf überprüfen : if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
— Zachary Murray,

4

Es ist nicht erforderlich, die Standardsyntaxdatei zu bearbeiten. Das vim-java Plugin unterstützt dies. Einfach wie jedes andere Plugin installieren und der Lambda-Operator wird korrekt hervorgehoben.


Bist du sicher? Weil ich keinen Code dafür sehe und das einzige Commit, das ich sehe, nur den ->von javaError mit der Meldung "Stimmt nicht mit javaError überein, wenn es ein Lambda-Symbol ist" entfernt (aber keine Hervorhebung als Funktion hinzufügt).
— Martin Tournoij

@Caspetsmoker Du hast recht. Entfernt einfach die Fehlermeldung. Aber ich mag das lieber.
— Adelarsq

2
Ich sehe, dass die Laufzeitdateien im März 2015 übrigens aktualisiert wurden und dass das Repo, auf das Sie verlinken, nicht viele Korrekturen enthält, die durch dieses Update eingeführt werden. Zu
— Ihrer Information

@Carpetsmoker Schön. Hat wie erwartet funktioniert. Thanks =)
— Adelarsq
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.