การเน้นไวยากรณ์ของ Vim จะถือว่า lambda (->) ใน Java เกิดข้อผิดพลาด


25

ฉันใช้ Vim เป็นโปรแกรมใน Java 8 และมีปัญหากับการเน้นไวยากรณ์

คุณลักษณะใหม่ในชวา 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นอกจากนี้คุณยังจะต้อง symlink 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
Zachary Murray

4

ไม่จำเป็นต้องแก้ไขไฟล์ไวยากรณ์เริ่มต้น เป็นกลุ่ม-Javaปลั๊กอินมีการสนับสนุนนี้ เพียงติดตั้งเช่นปลั๊กอินอื่น ๆ และตัวดำเนินการแลมบ์ดาจะถูกเน้นอย่างถูกต้อง


คุณแน่ใจไหม? เพราะฉันไม่เห็นรหัสใด ๆ เลยและสิ่งเดียวที่ฉันเห็นเห็นก็คือลบ->javaError ออกจากข้อความ "อย่าจับคู่ javaError หากเป็นสัญลักษณ์แลมบ์ดา" (แต่ไม่ได้เพิ่มการเน้นเป็นฟังก์ชัน)
Martin Tournoij

@Caspetsmoker คุณพูดถูก เพียงลบข้อความแสดงข้อผิดพลาด แต่ฉันชอบสิ่งนี้
adelarsq

2
ฉันเห็นว่าไฟล์รันไทม์ได้รับการอัปเดตในเดือนมีนาคม 2558 btw และ repo ที่คุณเชื่อมโยงไปนั้นไม่มีการแก้ไขมากมายที่การอัพเดทนี้แนะนำ FYI :-)
Martin Tournoij

@Carpetsmoker ที่ดี ทำงานได้ตามที่คาดหวัง ขอบคุณ =)
adelarsq
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.