Vim'in sözdizimi vurgusu Java'da bir lambda (->) hatası olarak kabul ediyor


25

Java 8'de programlamak için Vim kullanıyorum ve sözdizimi vurgulamasıyla ilgili bir sorun yaşıyorum.

Java 8 yeni bir özellik ok operatör oluşturulması sonucunu lambda destek vardır: ->. Vim, bunu bir * .java dosyasındaki geçerli bir işleç olarak tanımıyor. Bu nedenle, bu operatöre "kırmızı yazım hatası" konusuna dikkat çekmek için parlak kırmızı renkte vurgu yapar. (Elbette, bu gerçekten geçerli bir sözdizimidir.)

Vim'in izin verilen operatörlerin "sözlüğünü" güncellemenin ve / veya bu sorunu önlemek için sözdizimini vurgulamanın bir yolu var mı?

İlk iki :versiondevlet hattı :

VIM - Vi IM 7.4 oldu (2013 Ağustos 10, derlendi 2 Ocak 2014 19:39:32)

Dahil edilen yamalar: 1-52

Yanıtlar:


32

2016 güncellemesi

Vim sözdizimi dosyası v7.4.649'da (Mart 2015); bu yüzden bu yamaya sahipseniz, bunu yapmanız gerekmez.

Bunu düzeltmenin en kolay yolu muhtemelen yeni syntax/java.vimdosyayı indirerek ve onu yerleştirerek ~/.vim/syntax/java.vimvarsayılanı geçersiz kılmaktır $VIMRUNTIME/syntax/java.vim. Buna bağlı olarak bunun html.vimçalışması için sembolik bağlantıya ihtiyacınız olacaktır java.vim:

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

Orijinal cevap

Benim /usr/share/vim/vim74/syntax/java.vimbu var:

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

Bkz [^-]->parçasını? Bu, vurgulamanın yapılmasına neden olur.

Aynı kuralı ~/.vim/after/syntax/java.vimeksi lambda sözdizimine sahip bir dosya ekleyerek bu kuralı geçersiz kılabilirsiniz :

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

Ve bonus puanlar için, bu fonksiyonu bir fonksiyon olarak vurgulamak için bu satırı ekleyebiliriz:

syn match javaFuncDef "[^-]->"

Bir hata raporu doldurmayı düşünün. :help bug-reportsNasıl olduğunu açıklar. ...In gibi bir hata olarak vurgulanan daha (yeni?) Yapıları var gibi görünüyor public static void main(String... args).


1
Bonus puanların eşleşmesi java_highlight_functionsetkin olup olmadığını kontrol etmez . Tutarlılık konusunda nevrotikseniz, syn matcharamadan önce muhtemelen kontrol etmelisiniz :if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray

4

Varsayılan sözdizimi dosyasını düzenlemek gerekmez. Vim-java Eklentinin bu desteği vardır. Sadece başka bir eklenti gibi kurun ve lambda operatörü doğru şekilde vurgulanacaktır.


Emin misiniz? Çünkü bunun için herhangi bir kod görmüyorum ve gördüğüm tek taahhüt yalnızca ->javaError'dan "lambda sembolü ise javaError'la eşleşmeyin" mesajını kaldırıyor (ancak bir işlev olarak vurgulama yapmıyor).
Martin Tournoij

@Caspetsmoker Haklısın. Sadece hata mesajını kaldırır. Ama ben böyle tercih ederim.
adelarsq

2
Çalışma zamanı dosyalarının Mart 2015 btw’de güncellendiğini ve bağlandığınız reponun bu güncellemelerin getirdiği birçok düzeltmenin olmadığını görüyorum. FYI :-)
Martin Tournoij

@Carpetsmoker Güzel. Beklendiği gibi çalıştı. Thanks =)
adelarsq
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.