Làm nổi bật cú pháp của Vim coi lambda (->) trong Java là một lỗi


25

Tôi đang sử dụng Vim để lập trình trong Java 8 và đang gặp vấn đề với việc tô sáng cú pháp.

Một tính năng mới trong Java 8 là hỗ trợ lambda, dẫn đến việc tạo ra toán tử mũi tên : ->. Vim không nhận ra đây là toán tử hợp lệ trong tệp * .java. Do đó, nó làm nổi bật toán tử này bằng màu đỏ sáng để thu hút sự chú ý đến "lỗi cú pháp". (Tất nhiên, đây thực sự là cú pháp hợp lệ.)

Có cách nào để cập nhật "từ điển" của các nhà khai thác được phép và / hoặc sửa lỗi tô sáng cú pháp để tránh vấn đề này không?

Hai dòng đầu tiên của :versiontrạng thái:

VIM - Vi IMproved 7.4 (2013 ngày 10 tháng 8, biên soạn ngày 2 tháng 1 năm 2014 19:39:32)

Bao gồm các bản vá: 1-52

Câu trả lời:


32

Cập nhật năm 2016

Tệp cú pháp Vim đã được cập nhật cho điều này trong v7.4.649 (tháng 3 năm 2015); Vì vậy, nếu bạn có bản vá này, bạn không cần phải làm điều này.

Cách dễ nhất để khắc phục điều này có lẽ là bằng cách tải xuống tệp mới hơnsyntax/java.vim và đặt nó vào ~/.vim/syntax/java.vimđể nó sẽ ghi đè mặc định $VIMRUNTIME/syntax/java.vim. Bạn cũng sẽ cần symlink html.vimđể làm việc này java.vimtùy thuộc vào điều này:

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

Câu trả lời gốc

Của tôi /usr/share/vim/vim74/syntax/java.vimcó cái này:

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

Xem [^-]->phần nào? Điều đó gây ra lỗi đánh dấu.

Bạn có thể ghi đè quy tắc này bằng cách thêm một ~/.vim/after/syntax/java.vimtệp, với cùng một mẫu trừ đi cú pháp lambda:

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

Và để có điểm thưởng, chúng ta có thể thêm dòng này để làm nổi bật nó dưới dạng hàm:

syn match javaFuncDef "[^-]->"

Xem xét nộp báo cáo lỗi. :help bug-reportsgiải thích như thế nào Dường như có nhiều cấu trúc (mới?) Được tô sáng là một lỗi, chẳng hạn như ...trong public static void main(String... args).


1
Sự phù hợp cho các điểm thưởng không kiểm tra nếu java_highlight_functionsđã được kích hoạt. Nếu bạn bị thần kinh về tính nhất quán, có lẽ bạn nên kiểm tra nó trước syn matchcuộc gọi: if exists("java_highlight_functions") | syn match javaFuncDef "[^-]->" | endif
Zachary Murray

4

Không cần thiết phải chỉnh sửa tệp cú pháp mặc định. Các vim-java plugin có hỗ trợ cho việc này. Chỉ cần cài đặt như bất kỳ plugin nào khác và toán tử lambda sẽ được tô sáng chính xác.


Bạn có chắc không? Bởi vì tôi không thấy bất kỳ mã nào cho nó và cam kết duy nhất tôi thấy chỉ xóa ->javaError với thông báo "Không khớp javaError nếu đó là biểu tượng lambda" (nhưng không thêm phần tô sáng dưới dạng hàm).
Martin Tournoij

@Caspetsmoker Bạn nói đúng. Chỉ cần loại bỏ thông báo lỗi. Nhưng tôi thích như thế này.
adelarsq

2
Tôi thấy rằng các tệp thời gian chạy đã được cập nhật vào tháng 3 năm 2015 btw và rằng repo mà bạn liên kết đến không có nhiều bản sửa lỗi mà bản cập nhật này giới thiệu. FYI :-)
Martin Tournoij

@Carpetsmoker Đẹp. Đã làm việc như mong đợi. Cảm ơn =)
adelarsq
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.