Penyorotan sintaksis Vim menganggap lambda (->) di Java sebagai kesalahan

25

Saya menggunakan Vim untuk memprogram di Java 8, dan saya mengalami masalah dengan penyorotan sintaksis.

Sebuah fitur baru di Jawa 8 adalah lambda dukungan, yang mengakibatkan penciptaan operator panah: ->. Vim tidak mengenali ini sebagai operator yang valid dalam file * .java. Karena itu, ini menyoroti operator ini dengan warna merah terang untuk menarik perhatian pada "kesalahan sintaksis." (Tentu saja, ini benar-benar sintaks yang valid.)

Apakah ada cara untuk memperbarui "kamus" Vim dari operator yang diizinkan dan / atau memperbaiki penyorotan sintaks untuk menghindari masalah ini?

Dua baris pertama :versionnegara:

VIM - Vi IMproved 7.4 (2013 10 Agustus, disusun 2 Jan 2014 19:39:32)

Termasuk tambalan: 1-52

apnorton
sumber

Jawaban:

32

Pembaruan 2016

File sintaks Vim telah diperbarui untuk ini di v7.4.649 (Maret 2015); jadi jika Anda memiliki tambalan ini, Anda tidak perlu melakukan ini.

Cara termudah untuk memperbaikinya adalah dengan mengunduh file yang lebih barusyntax/java.vim dan memasukkannya ~/.vim/syntax/java.vimsehingga akan menimpa default $VIMRUNTIME/syntax/java.vim. Anda juga perlu symlink html.vimagar ini berfungsi karena java.vimtergantung pada ini:

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

Jawaban asli

Saya /usr/share/vim/vim74/syntax/java.vimpunya ini:

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

Lihat [^-]->bagian itu? Itu menyebabkan sorotan kesalahan.

Anda dapat mengganti aturan ini dengan menambahkan ~/.vim/after/syntax/java.vimfile, dengan pola yang sama minus sintaks lambda:

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

Dan untuk poin bonus, kami dapat menambahkan baris ini untuk menyoroti ini sebagai fungsi:

syn match javaFuncDef "[^-]->"

Pertimbangkan mengajukan laporan bug. :help bug-reportsmenjelaskan caranya. Tampaknya ada lebih banyak konstruksi (baru?) Yang disorot sebagai kesalahan, seperti ...di public static void main(String... args).

Martin Tournoij
sumber
1
Pencocokan untuk poin bonus tidak memeriksa apakah java_highlight_functionstelah diaktifkan. Jika Anda neurotik tentang konsistensi, Anda mungkin harus memeriksanya sebelum syn matchmenelepon: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray
4

Tidak perlu mengedit file sintaks default. The vim-java plugin memiliki dukungan untuk ini. Cukup instal seperti plugin lainnya dan operator lambda akan disorot dengan benar.

adelarsq
sumber
Apakah kamu yakin Karena saya tidak melihat kode untuk itu, dan satu - satunya komit yang saya lihat hanya menghapus ->dari javaError dengan pesan "Jangan cocokkan javaError jika itu simbol lambda" (tetapi tidak menambahkan penyorotan sebagai fungsi).
Martin Tournoij
@ Caspetsmoker Anda benar. Hanya menghapus pesan kesalahan. Tapi saya lebih suka seperti ini.
adelarsq
2
Saya melihat bahwa file runtime telah diperbarui pada bulan Maret 2015, dan repo yang Anda tautkan tidak memiliki banyak perbaikan yang diperkenalkan oleh pembaruan ini. FYI :-)
Martin Tournoij
@Carpetsmoker Bagus. Berhasil seperti yang diharapkan. Terima kasih =)
adelarsq