Підсвічування синтаксису Vim вважає лямбда (->) у Java помилкою


25

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

Нова функція в Java 8 лямбда підтримки, що привело до створення оператора стрілки: ->. Vim не розпізнає це як дійсний оператор у файлі * .java. Як такий, він виділяє цього оператора яскраво-червоним кольором, щоб звернути увагу на "синтаксичну помилку". (Звичайно, це дійсно правильний синтаксис.)

Чи є спосіб оновити "словник" Vim дозволених операторів та / або виправити виділення синтаксису, щоб уникнути цієї проблеми?

Перші два рядки :versionдержави:

VIM - Vi IMproved 7.4 (2013 10 серп., Складено 2 січня 2014 19:39:32)

Патчі в комплекті: 1-52

Відповіді:


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пояснює, як. Здається, є більше (нових?) Конструкцій, які виділяються як помилка, наприклад, ...в public static void main(String... args).


1
Відповідність бонусних балів не перевіряється, чи java_highlight_functionsактивовано. Якщо ви невротичні щодо консистенції, ви, ймовірно, повинні перевірити це перед syn matchдзвінком: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Захарій Мюррей

4

Не потрібно редагувати синтаксичний файл за замовчуванням. ВІМ-Java плагін має підтримку для цього. Просто встановіть, як і будь-який інший плагін, і оператор лямбда буде виділений правильно.


Ти впевнений? Тому що я не бачу жодного коду для цього, і єдине, що я бачу, лише видаляє ->з javaError повідомлення "Не збігайтесь з javaError, якщо це лямбда-символ" (але не додає виділення як функції).
Martin Tournoij

@Caspetsmoker Ви маєте рацію. Просто видаляє повідомлення про помилку. Але я віддаю перевагу, як це.
adelarsq

2
Я бачу, що файли виконання були оновлені в березні 2015 року, і до репортажу, на який ви посилаєтеся, не так багато виправлень, які вводяться в цьому оновлення. FYI :-)
Martin Tournoij

@Carpetsmoker Nice. Працював, як очікувалося. Спасибі =)
adelarsq
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.