विम का वाक्यविन्यास हाइलाइटिंग जावा में एक लैम्ब्डा (->) को एक त्रुटि मानता है


25

मैं जावा 8 में प्रोग्राम करने के लिए विम का उपयोग कर रहा हूं, और सिंटैक्स हाइलाइटिंग के साथ समस्या हो रही है।

जावा 8 में एक नई सुविधा लैम्ब्डा सपोर्ट है, जिसके परिणामस्वरूप एरो ऑपरेटर का निर्माण किया गया है ->:। विम इसे * .java फ़ाइल में मान्य ऑपरेटर के रूप में नहीं पहचानता है। इस प्रकार, यह "सिंटैक्स त्रुटि" पर ध्यान आकर्षित करने के लिए इस ऑपरेटर को उज्ज्वल लाल रंग में उजागर करता है। (बेशक, यह वास्तव में वैध वाक्यविन्यास है।)

क्या अनुमति प्राप्त ऑपरेटरों के विम के "शब्दकोश" को अपडेट करने और / या इस मुद्दे से बचने के लिए वाक्यविन्यास को उजागर करने का एक तरीका है?

:versionराज्य की पहली दो पंक्तियाँ :

VIM - Vi IMproved 7.4 (2013 अगस्त 10, संकलित Jan 2 2014 2014 19:39:32)

शामिल पैच: 1-52

जवाबों:


32

2016 अपडेट

V7.4.649 (मार्च 2015) में इसके लिए विम सिंटैक्स फ़ाइल को अपडेट किया गया था ; इसलिए यदि आपके पास यह पैच है तो आपको ऐसा करने की आवश्यकता नहीं है।

इसे ठीक करने का सबसे आसान तरीका शायद नई syntax/java.vimफ़ाइल को डाउनलोड करना और उसमें डाल देना है, ~/.vim/syntax/java.vimइसलिए यह डिफ़ॉल्ट को ओवरराइड कर देगा $VIMRUNTIME/syntax/java.vimhtml.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

डिफ़ॉल्ट सिंटैक्स फ़ाइल को संपादित करना आवश्यक नहीं है। Vim-जावा प्लग इन को इस के लिए समर्थन हासिल है। बस किसी अन्य प्लगइन की तरह स्थापित करें और लैम्ब्डा ऑपरेटर को सही ढंग से हाइलाइट किया जाएगा।


क्या आपको यकीन है? क्योंकि मुझे इसके लिए कोई कोड दिखाई नहीं देता है, और केवल एक ही प्रतिबद्ध है जिसे मैं केवल ->javaError से संदेश के साथ हटाता हूं "यदि यह एक लैम्ब्डा प्रतीक है तो javaError से मेल न खाएं" (लेकिन एक फ़ंक्शन के रूप में हाइलाइटिंग नहीं जोड़ता है)।
मार्टिन टूरनोइज

@ कैस्पेटस्मोकर आप सही हैं। बस त्रुटि संदेश निकालता है। लेकिन मैं इस तरह से पसंद करता हूं।
adelarsq

2
मैं देखता हूं कि मार्च 2015 में रनटाइम फ़ाइलों को अपडेट किया गया है btw, और यह कि आप जिस लिंक को लिंक करते हैं उसमें बहुत सारे फ़िक्सेस नहीं होते हैं जो यह बताता है। FYI करें :-)
मार्टिन टूरनोइज

@ कारपेटसोकर नाइस। उम्मीद के मुताबिक काम किया। धन्यवाद =)
adelarsq
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.