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

Apnorton
quelle

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).

Martin Tournoij
quelle
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.

adelarsq
quelle
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