Podświetlanie składni Vima uważa lambda (->) w Javie za błąd

25

Używam Vima do programowania w Javie 8 i mam problem z podświetlaniem składni.

Nowością Java 8 jest wsparcie lambda, co doprowadziło do utworzenia podmiotu strzałka: ->. Vim nie rozpoznaje tego jako poprawnego operatora w pliku * .java. Jako taki, podświetla ten operator jaskrawym czerwonym kolorem, aby zwrócić uwagę na „błąd składniowy”. (Oczywiście, to naprawdę jest poprawna składnia.)

Czy istnieje sposób na zaktualizowanie „słownika” dozwolonych operatorów Vima i / lub naprawienie podświetlania składni, aby uniknąć tego problemu?

Pierwsze dwie linie :versionstanu:

VIM - Vi IMproved 7.4 (10 sierpnia 2013, opracowano 2 stycznia 2014 19:39:32)

Zawarte łaty: 1-52

apnorton
źródło

Odpowiedzi:

32

Aktualizacja 2016

Plik składni Vima został zaktualizowany w tym celu w wersji 7.4.649 (marzec 2015); więc jeśli masz tę łatkę, nie musisz tego robić.

Najprościej można to naprawić, pobierając nowszy syntax/java.vimplik i wkładając go, ~/.vim/syntax/java.vimaby zastąpił domyślny $VIMRUNTIME/syntax/java.vim. Aby to zadziałało, musisz także utworzyć dowiązanie symboliczne, html.vimponieważ java.vimzależy to od tego:

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

Oryginalna odpowiedź

Mój /usr/share/vim/vim74/syntax/java.vimma to:

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

Widzisz [^-]->część? To powoduje podświetlenie błędu.

Możesz zastąpić tę regułę, dodając ~/.vim/after/syntax/java.vimplik o tym samym wzorze minus składnia lambda:

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

W przypadku punktów bonusowych możemy dodać tę linię, aby podświetlić to jako funkcję:

syn match javaFuncDef "[^-]->"

Rozważ złożenie raportu o błędzie. :help bug-reportswyjaśnia jak. Wydaje się, że jest więcej (nowych?) Konstrukcji, które są podświetlone jako błędy, takie jak ...in public static void main(String... args).

Martin Tournoij
źródło
1
Dopasowanie punktów bonusowych nie sprawdza, czy java_highlight_functionszostało włączone. Jeśli jesteś nerwowy w kwestii spójności, prawdopodobnie powinieneś to sprawdzić przed syn matchrozmową telefoniczną: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray
4

Edycja domyślnego pliku składni nie jest konieczna. Vim-java plugin posiada wsparcie dla tego produktu. Po prostu zainstaluj jak każdą inną wtyczkę, a operator lambda zostanie poprawnie podświetlony.

adelarsq
źródło
Jesteś pewny? Ponieważ nie widzę dla niego żadnego kodu, a jedyne zatwierdzenie, które widzę, usuwa tylko ->z javaError z komunikatem „Nie dopasuj javaError, jeśli jest to symbol lambda” (ale nie dodaje podświetlenia jako funkcji).
Martin Tournoij
@Caspetsmoker Masz rację. Po prostu usuwa komunikat o błędzie. Ale ja tak wolę.
adelarsq
2
Widzę, że pliki środowiska wykonawczego zostały zaktualizowane w marcu 2015 r., A repozytorium, do którego prowadzi łącze, nie zawiera wielu poprawek wprowadzonych przez te aktualizacje. FYI :-)
Martin Tournoij
@Carpetsmoker Nice. Działa zgodnie z oczekiwaniami. Dzięki =)
adelarsq