Подсветка синтаксиса Vim считает лямбду (->) в Java ошибкой

25

Я использую Vim для программирования на Java 8, и у меня проблема с подсветкой синтаксиса.

Новая функция в Java 8 лямбда поддержки, что привело к созданию оператора стрелки: ->. Vim не распознает это как допустимый оператор в файле * .java. Таким образом, он выделяет этот оператор ярко-красным, чтобы привлечь внимание к «синтаксической ошибке». (Конечно, это действительно правильный синтаксис.)

Есть ли способ обновить «словарь» разрешенных операторов Vim и / или исправить подсветку синтаксиса, чтобы избежать этой проблемы?

Первые две строки :versionсостояния:

VIM - Vi IMproved 7.4 (10 августа 2013 г., составлено 2 января 2014 г. 19:39:32)

Включенные патчи: 1-52

apnorton
источник

Ответы:

32

Обновление 2016

Файл синтаксиса Vim был обновлен для этого в v7.4.649 (март 2015); так что если у вас есть этот патч, вам не нужно это делать.

Возможно, самый простой способ исправить это - загрузить новый syntax/java.vimфайл и вставить его, ~/.vim/syntax/java.vimчтобы он переопределил файл по умолчанию $VIMRUNTIME/syntax/java.vim. Вам также нужно будет использовать символическую ссылку, html.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

Нет необходимости редактировать файл синтаксиса по умолчанию. ВИМ-Java плагин имеет поддержку для этого. Просто установите, как любой другой плагин, и лямбда-оператор будет выделен правильно.

adelarsq
источник
Вы уверены? Потому что я не вижу никакого кода для него, и единственный коммит, который я вижу, удаляет только ->из javaError с сообщением «Не сопоставлять javaError, если это лямбда-символ» (но не добавляет подсветку как функцию).
Мартин Турной
@ Caspetsmoker Ты прав. Просто удаляет сообщение об ошибке. Но я предпочитаю, как это.
adelarsq
2
Я вижу, что исполняемые файлы были обновлены в марте 2015 года, и что репозиторий, на который вы ссылаетесь, не имеет много исправлений, которые вносит это обновление. К вашему сведению :-)
Мартин Турной
@Carpetsmoker Ницца. Работал как положено. Спасибо =)
adelarsq