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

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).


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.