अतिरिक्त सिंटैक्स हाइलाइट को nvim में जोड़ना; .vim फ़ाइल लोड करने के लिए .config / nvim / after / syntax नहीं मिल सकता है

Jan 12 2021

मैं एक वाक्य विन्यास हाइलाइटिंग के लिए उपयोग कर रहा हूँ एक प्लगइन में अतिरिक्त वाक्यविन्यास हाइलाइटिंग जोड़ने की कोशिश कर रहा हूँ। मैंने फ़ोल्डर में अतिरिक्त सिंटैक्स फ़ाइल जोड़ने की कोशिश की fstrings.vimहै, ~/.config/nvim/after/syntaxलेकिन मेरा एनवीएम इसे नहीं उठा रहा है।

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

  1. जांचें कि क्या ~/.config/nvim/afterऔर / या ~/.config/nvim/after/syntaxमेरे रनटाइम पथ में जोड़ा गया है।
  • केवल ~/.config/nvim/afterमेरे पथ में जोड़ा जाता है - :set rtp>> के साथ जाँच की जाती है runtimepath=~...,...,~/.config/nvim/after- हालाँकि मुझे फ़ाइल लोड नहीं दिखती है :scriptnames। मैं फ़ाइल को लोड करने के लिए कैसे प्राप्त कर सकता हूं?
  1. करने के लिए फ़ाइल का स्थान बदलें ~/.config/nvim/afterबजाय~/.config/nvim/after/syntax
  • यह भी काम नहीं करता है।
  1. फ़ाइल को मैन्युअल रूप से लोड करें।
  • यह वास्तव में आश्चर्यजनक रूप से काम करता है। मैं मैन्युअल रूप से फ़ाइल के सिंटैक्स को बदल सकता हूं :set syntax=fstrings, हालांकि, प्लगइन द्वारा प्रदान किए गए सभी मूल सिंटैक्स हाइलाइटिंग गायब हो जाते हैं, और केवल प्रदान किए गए हाइलाइटिंग (नीचे की छवि में प्रिंट स्टेटमेंट देखें) fstrings.vimका उपयोग किया जाता है। यह मुझे विश्वास दिलाता है कि पथ को सही तरीके से स्थापित किया गया है लेकिन nvim स्टार्टअप के दौरान इसे लोड नहीं करना चाहता है और / या प्लगइन के उपयोग के कारण इसे अनदेखा करता है।

मुझे पता है कि /after/फ़ोल्डर का उपयोग पिछली सेटिंग्स के बाद सेटिंग्स को लागू करने के लिए किया जाता है, बजाय ओवरराइटिंग के। मैंने पहले से ही यहाँ और यहाँ के समाधान की कोशिश की है, लेकिन मैं इसे काम करने में सक्षम नहीं हूं। यह कैसे सराहना की जाएगी पर कोई मदद की सराहना की जाएगी।

" ~/.config/nvim/after/syntax/fstrings.vim

syn match pythonEscape +{{+ contained containedin=pythonfString,pythonfDocstring
syn match pythonEscape +}}+ contained containedin=pythonfString,pythonfDocstring

syn region pythonfString matchgroup=pythonQuotes
      \ start=+[fF]\@1<=\z(['"]\)+ end="\z1"
      \ contains=@Spell,pythonEscape,pythonInterpolation
syn region pythonfDocstring matchgroup=pythonQuotes
      \ start=+[fF]\@1<=\z('''\|"""\)+ end="\z1" keepend
      \ contains=@Spell,pythonEscape,pythonSpaceError,pythonInterpolation,pythonDoctest

syn region pythonInterpolation contained
      \ matchgroup=SpecialChar
      \ start=+{{\@!+ end=+}}\@!+ skip=+{{+ keepend
      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue,pythonDoctest

syn match pythonStringModifier /:\(.[<^=>]\)\?[-+ ]\?#\?0\?[0-9]*[_,]\?\(\.[0-9]*\)\?[bcdeEfFgGnosxX%]\?/ contained containedin=pythonInterpolation
syn match pythonStringModifier /![sra]/ contained containedin=pythonInterpolation

hi link pythonfString String
hi link pythonfDocstring String
hi link pythonStringModifier PreProc

जवाब

1 filbranden Jan 13 2021 at 07:17

आमतौर पर वाक्यविन्यास नियमों को 'filetype'बफर के लिए सेट के नाम पर रखा जाता है , जो आमतौर पर पता लगाया जाता है (फ़ाइल एक्सटेंशन, फ़ाइल नाम या फ़ाइल सामग्री के आधार पर) और आमतौर पर स्वचालित रूप से सेट होता है।

यदि आप पायथन के लिए सिंटैक्स हाइलाइटिंग को विस्तारित करना चाहते हैं , तो आपको आमतौर पर अपनी स्क्रिप्ट का नाम "python"फ़िलाटाइप के बाद देना चाहिए ।

जब विम पायथन के लिए सिंटैक्स नियमों को लोड करता है , तो यह नामित फ़ाइलों के लिए होगा syntax/python.vimया syntax/python/*.vim(फ़्लिपुगिन नियम भी अनुमति देता है python_*.vim, लेकिन यह पता चला है कि सिंटैक्स के लिए ऐसा नहीं है।)

इसलिए आपको अपनी फ़ाइल ~/.config/nvim/after/syntax/python.vim(या ~/.config/nvim/after/syntax/python/fstrings.vim) को नाम देना चाहिए ताकि उसे पायथन फ़ाइलों के लिए लोड किया जा सके और पायथन के लिए बंडल रनटाइम नियमों के बाद लोड किया जाए।


एक अन्य विकल्प 'syntax'एक डॉट द्वारा अलग किए गए कई प्रकारों को शामिल करने का विकल्प सेट करना है । उदाहरण के लिए, :setlocal syntax=python.fstringsपहले लोड होगा syntax/python.vimऔर फिर होगा syntax/fstrings.vim। यह अधिक उपयोगी होगा यदि आपके पास सिंटैक्स का एक टुकड़ा है जो कुछ हद तक सामान्य है और कई अलग-अलग भाषाओं के लिए समझ में आ सकता है (उदाहरण के लिए, टिप्पणियों के अंदर एक प्रलेखन प्रारूप पर प्रकाश डाला गया कुछ सिंटैक्स?) यह इस मामले में बहुत लागू नहीं लगता है? , जहां एफ-स्ट्रिंग्स अनिवार्य रूप से पायथन सिंटैक्स हैं। एक 'syntax'सेटिंग को अलग से बनाए रखना 'filetype'मुश्किल भी हो सकता है, इसे डिफ़ॉल्ट स्थान पर क्लोएबर्ड होने से बचने के लिए सही स्थान पर (बहुत जल्दी या बहुत देर नहीं) सेट करना होगा।


आपकी स्क्रिप्ट के ऐसे मुद्दे को लोड न किए जाने की समस्या का निवारण करते समय, आप :scriptnamesकमांड का उपयोग यह जांचने के लिए कर सकते हैं कि आपकी *.vimस्क्रिप्ट वास्तव में विम द्वारा किसी बिंदु पर लोड की गई थी या नहीं। विशिष्ट फ़िलाटाइप की एक फ़ाइल खोलने से पहले और उसके बाद दोहराएं कि आप पुष्टि करने के बाद उस फ़ाइलेटाइप पहचान से चालू हो गए थे।