मैं पायथन कीवर्ड जैसे "स्वयं" के लिए "गायब" वाक्यविन्यास को कैसे ठीक कर सकता हूं?


12

मैं अजगर के लिए वाक्य रचना हाइलाइटिंग को ठीक करने की कोशिश कर रहा हूं; मेरे रंग उन लोगों के स्क्रीनशॉट से अलग हैं जो इसे "अलग-अलग विम रंग योजनाओं में" दिखना चाहिए। और .rb (जो सही ढंग से प्रदर्शित होता है) को .py पर तुलना करने में अंतर देख सकते हैं, जो ऐसा लगता है कि यह बंद है:

यहाँ छवि विवरण दर्ज करें

उदाहरण के लिए, ध्यान दें कि कैसे selfहाइलाइट नहीं किया गया है। (यह बेस 16 में है, लेकिन तुलना अन्य रंग योजनाओं में समान होगी)। आम तौर पर, ऐसा लगता है कि ऑब्जेक्ट सिंटैक्स हाइलाइटिंग गलत है।

कुछ चीजें जो मैंने कोशिश की हैं:

  1. वाक्यविन्यास लिपियों के भार को देखते हुए; नीचे दिए गए उदाहरण में .py और .rb के बीच एकमात्र अंतर यह है कि निश्चित रूप से माणिक इंडेंट / रूबी.विम और सिंटैक्स / रूबी प्राप्त करता है। जबकि पायथन को इंडेंट / python.vim और सिंटैक्स / python.vim मिलता है। ये वे फाइलें हैं जो होमब्रेव विम के साथ आती हैं।
  2. टर्मिनल (iterm2) विम के बजाय मैकविम में एक ही फाइल लोड कर रहा है; एक ही समस्या, चित्र में फ़ाइलें बिल्कुल वैसी ही दिखती हैं।
  3. नया python.vim फ़ाइल जोड़ना । .vim/afterस्क्रिप्ट के रूप में उपयोग किए जाने पर भी समस्या हल नहीं होती है ।

किसी भी सुझाव का स्वागत है; मैं घंटों तक इस पर अपना सिर पीटता रहा, और यह पता नहीं लगा पाया कि हाइलाइटिंग उम्मीद के मुताबिक काम क्यों नहीं कर रही है।


ध्यान दें कि पायथन में प्रतीक नहीं हैं, और मैं दृढ़ता से आपको नए कोड के लिए पायथन 3 सिंटैक्स का उपयोग करने की सलाह दूंगा।
मार्टिन Tournoij

जवाबों:


12

संक्षिप्त में हाइलाइट कैसे काम करता है:

  • में syntax/<filetype>.vimसिंटैक्स नियमों के साथ परिभाषित कर रहे हैं :syntaxआदेश। यह कमांड परिभाषित करता है, ठीक है, वाक्यविन्यास। यह कहता है "यदि पाठ इस नियमित अभिव्यक्ति से मेल खाता है, तो यह एक स्ट्रिंग है", और इसके आगे। ऐसा करने के लिए, यह एक हाइलाइट समूह प्रदान करता है । यह रंगों के बारे में कुछ नहीं कहता है।

  • :highlight"इन रंगों के साथ इस समूह को उजागर करें"। यह रंग योजना में किया जाता है , वाक्यविन्यास फ़ाइल में नहीं। डिफ़ॉल्ट हाइलाइट समूहों में से एक गुच्छा रहे हैं ( String, Function, Special, और आगे) सभी रंग योजनाओं परिभाषित करना चाहिए जो।

    हालांकि आप इन डिफ़ॉल्ट समूहों तक सीमित नहीं हैं, और आप जितने चाहें उतने समूह बना सकते हैं (लेकिन डिफ़ॉल्ट सिंटैक्स फ़ाइलें आमतौर पर नहीं होती हैं)।

  • indent/<filetype>.vimफ़ाइल स्वचालित खरोज नियंत्रित करता है। उदाहरण के लिए रूबी यह कहती है " defइंडेंटेशन लेवल बढ़ाने के बाद की लाइन " और "इंडेंटेशन लेवल endकम होने के बाद की लाइन "। यह रंगों या सिंटैक्स हाइलाइटिंग के साथ कुछ भी नहीं करता है।


विभिन्न प्रोग्रामिंग भाषाओं को अलग-अलग हाइलाइट क्यों किया जाता है? व्यक्तिगत सौंदर्यशास्त्र और जो भी इसे लिखा की राय के कारण भाग में। उदाहरण के लिए रूबी में Typeहाइलाइट समूह का उपयोग वर्ग नामों के लिए किया जाता है। लेकिन यह Functionया कुछ और भी हो सकता था । क्यों है Type? शायद इसलिए कि लेखक ने सोचा कि यह उसकी रंग योजना में बेहतर दिख रहा है।

लेकिन इससे भी महत्वपूर्ण बात यह है कि भाषाओं में अलग-अलग शब्दार्थ और संवेदनाएँ हैं। रूबी में, selfएक विशेष कीवर्ड है। आप कर सकते हैं self = "foo"या नहीं def self()। ये त्रुटियां हैं। लेकिन पायथन में ऐसा नहीं है। यह किसी भी विशेष गुणों के बिना सिर्फ एक और चर है। करते हुए:

x = Object()
x.foo()

पायथन द्वारा वास्तव में "अनुवादित" है:

Object.foo(x)

नाम selfसिर्फ सम्मेलन (लगभग सार्वभौमिक रूप से अपनाया गया) है लेकिन आप इसे अपनी पसंद के अनुसार नाम दे सकते हैं; def x(this):या def x(xxx):समान रूप से मान्य हैं। आप selfकहीं भी चाहें नाम का उपयोग कर सकते हैं; self = 'foo'और def self():पूरी तरह से ठीक हैं।

मेरा तर्क है कि selfइसे उजागर नहीं किया जाना चाहिए, क्योंकि यह न तो एक विशेष कीवर्ड है, और न ही पूर्व-परिभाषित चर (जैसे str) है। selfवाक्यविन्यास फ़ाइल में शब्द का कोई निशान नहीं है , इसलिए ऐसा लगता है कि लेखक ने उसी का तर्क दिया है :-)


यदि आप selfहाइलाइट किए गए हैं, तो आपको इसके लिए एक सिंटैक्स नियम बनाना होगा:

:syn keyword pythonBuiltin self

pythonBuiltinसमूह का नाम पहले से ही डिफ़ॉल्ट वाक्य रचना फाइल में परिभाषित और से जुड़ा हुआ है Functionउजागर समूह। नए हाइलाइट समूह का उपयोग करने के लिए, कुछ का उपयोग करें:

:syn keyword pythonSelf self
:highlight def link pythonSelf Special

इन परिवर्तनों को करने के लिए आप अपनी vimrc फ़ाइल में सिर्फ उन्हें चिपका नहीं सकते। वाक्यविन्यास फ़ाइल इसे ओवरराइड करेगी। इसके बजाय आपको सिंटैक्स फ़ाइल लोड के बाद इसे चलाने की आवश्यकता होगी , जिसे आप दो तरीकों से कर सकते हैं:

  1. एक FileTypeस्वतः पूर्णता का उपयोग करें :

    augroup python
        autocmd!
        autocmd FileType python
                    \   syn keyword pythonSelf self
                    \ | highlight def link pythonSelf Special
    augroup end
    
  2. का प्रयोग करें after-directory, ~/.vim/after/syntax/python.vim:

    syn keyword pythonSelf self
    highlight def link pythonSelf Special
    

दोनों विधियां प्रभावी रूप से समान हैं। जो भी आपको पसंद हो उसका उपयोग करें।

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