जवाबों:
आप कस्टम सिंटैक्स नियम जोड़ सकते हैं, और उन्हें @nospell
कीवर्ड दे
सकते हैं, यह विम को इस सिंटैक्स मैच में वर्तनी जाँच लागू नहीं करने के लिए कहेगा। उदाहरण के लिए:
:syn match UrlNoSpell "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell
ऊपर पाठ फ़ाइलों के लिए काम करेगा, और कुछ फ़ाइलपेट (जैसे मार्कडाउन), लेकिन सभी फ़ाइलपेट के लिए नहीं।
ध्यान दें कि मैंने यहां एक बहुत ही सरल रेगेक्स का उपयोग किया है; देखें कि मैं कुछ विकल्पों के लिए पाठ से URL को पार्स कैसे कर सकता हूं ।
अन्य फ़िलिपीस के लिए, आपको थोड़ा और काम करने की आवश्यकता है। उदाहरण के लिए, python
फ़ाइलों के लिए, टिप्पणियां pythonComment
समूह में शामिल हैं /usr/share/vim/vim74/syntax/python.vim
:
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
इसे ओवरराइड करने के लिए, हमें करने की आवश्यकता है:
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
चाल, जिसमें हमारे कस्टम वाक्य रचना मैच के साथ शामिल किया जा सकता पहले से मिलान किया वाक्य रचना मिलान की सूची में जोड़ने के लिए है containedin=
यह देखने के लिए विम बताता
UrlNoSpell
regex भीतरpythonComment
मैचों।
हमें highlight
सही रंग सेट करने के लिए भी उपयोग करने की आवश्यकता है , क्योंकि ये विरासत में नहीं मिले हैं।
आपको कई स्थानों पर ऐसा करने की आवश्यकता है, उदाहरण के लिए पायथन स्ट्रिंग्स के लिए:
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
हमें 2 अलग सिंटैक्स मिलान समूहों की आवश्यकता है ताकि हम सही सिंटैक्स हाइलाइटिंग लागू कर सकें।
बेशक, अन्य फ़िलिस्तियों के लिए आपको अन्य containedin=
सिंटैक्स मैचों का उपयोग करने की आवश्यकता है ... एएफएआईके है , कोई "सार्वभौमिक" समाधान नहीं है, लेकिन सही लोगों को ढूंढना /usr/share/vim/vim74/syntax/*.vim
बहुत मुश्किल नहीं होना चाहिए।
ध्यान दें कि उपर्युक्त सभी कमांड को सिंटैक्स फ़ाइलों के बाद निष्पादित किया जाना चाहिए ; ऐसा करने के 2 तरीके हैं:
कमांड या की-मैपिंग से, इसे हर बार मैन्युअल रूप से लागू किया जाना चाहिए। जैसे
fun! NoUrlSpell()
if &filetype == 'python'
:syn match UrlNoSpellComment "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonComment
:highlight def link UrlNoSpellComment Comment
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
elseif &filetype == 'ruby'
" ...
else
syn match pythonComment "#.*$" contains=pythonTodo,@Spell
endif
endfun
command NoUrlSpell :call NoUrlSpell()
में कमांड डालते हैं ~/.vim/after/syntax/[filetype].vim
। विम इन फ़ाइलों को उठाएगा और डिफ़ॉल्ट सिंटैक्स फ़ाइलों के बाद उन्हें निष्पादित करेगा (देखें:)
:help after-directory
।
मार्टिन Tournoij 's अन्यथा उत्कृष्ट जवाब के रूप में मेरे लिए उम्मीद व्यवहार करने के लिए विफल रहता है - शायद वजह से करने के लिए अपने लाभ diraol की अभूतपूर्व python-mode
प्लगइन बजाय अजगर के लिए विम के डिफ़ॉल्ट वाक्य रचना फ़ाइल।
पायथन टिप्पणियों, स्ट्रिंग्स, या डॉकस्ट्रिंग्स के तहत यूआरआई को उजागर करने से बचने के python-mode
लिए, अपने उपयोगकर्ता-विशिष्ट ~/.vim/after/syntax/python.vim
फ़ाइल में निम्नलिखित संक्षिप्त एक-लाइनर जोड़ें :
syntax match NoSpellUriPython '\w\+:\/\/[^[:space:]]\+' transparent contained containedin=pythonComment,python.*String contains=@NoSpell
बस। महत्वपूर्ण रूप से, ध्यान दें कि यह एक एकल पंक्ति में मार्टिन के उत्तर में बारह अलग-अलग रेखाएं होती हैं जो संकुचित होती हैं । कैसे? प्राथमिक, मेरा प्रिय विम-आधारित वाटसन। हम जोड़ते हैं:
transparent
कीवर्ड, विम का निर्देश देते हुए अपनी मूल वाक्य रचना (जैसे, टिप्पणी, तार) से इस बच्चे वाक्य रचना के लिए मुख्य आकर्षण गुण वारिस के। यह हमें highlight def link
प्रत्येक बाल वाक्यविन्यास समूह के लिए स्पष्ट रूप से आराम करने से बचने में सक्षम बनाता है ।contained
कीवर्ड, अतीत अपनी मूल वाक्य रचना की सीमाओं का विस्तार से इस बच्चे वाक्य रचना को रोकने (जैसे, टिप्पणी के लिए EOL, तार के लिए स्ट्रिंग सीमांकक)।containedin
कीवर्ड पर अल्पविराम द्वारा सीमांकित किए जाते हैं । .*
Regex ऑपरेटर हमें चतुराई से मिलान करने के लिए सक्षम बनाता है सभी अजगर स्ट्रिंग वाक्य रचना समूहों (यानी, pythonString
, pythonUniString
, pythonRawString
, pythonUniRawString
, pythonDocstring
) कम से कम दर्द और अधिक से अधिक आगे संगतता के साथ।यद्यपि तकनीकी रूप से मान्य है, मार्टिन के उत्तर में एम्बेड की गई विमस्क्रिप्ट DRY (डोंट रिपीट योरसेल्फ) सिद्धांत का उल्लंघन करती है। आगे के विवरण के लिए भी इसी तरह का उत्तर देखें ।
लेकिन रुकिए ... और भी है।
मैं दोनों विम के अत्यधिक भोली डिफ़ॉल्ट वर्तनी जाँच और तृतीय-पक्ष प्लगइन्स (उदाहरण के लिए, स्पेलुन्कर , जो बिना शर्त वर्तनी को केवल कोड टिप्पणियों और स्ट्रिंग्स के बजाय पूरे बफर की जाँच करता है) से काफी नाराज हूँ जो मैंने तय किया है ... वास्तव में कुछ करने के लिए उसके बारे में। </gasp>
अच्छी तरह से परीक्षण किया विम नीचे झलकी समझदारी से बचा जाता है अजगर टिप्पणियों और तार के भीतर निम्न में से सभी वर्तनी जांच:
CamelCase
पहचानकर्ता।snake_case
पहचानकर्ता।UPPERCASE
पहचानकर्ता।@
-संशोधित पहचानकर्ता (जैसे, @muhdecorator
)।"
-delimited filetyped फ़ाइल नाम (जैसे, "muh_module.py"
)।:
-delimited substrings (जैसे, :func:
में: func: `re.sub`)।re.sub
में: func:` re.sub`)।निम्नलिखित में से कुछ या सभी को अपनी उपयोगकर्ता-विशिष्ट ~/.vim/after/syntax/python.vim
फ़ाइल में जोड़ें और हांफते हुए हांफें क्योंकि विम वास्तव में वर्तनी की जाँच करता है:
" Avoid spell checking URIs.
syntax match NoSpellPythonUri /\v\w+:\/\/[^[:space:]]+/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
" Avoid spell checking both CamelCase-formatted identifiers and uppercase
" identifiers. Since most languages (excluding Raku) prohibit Unicode in
" identifiers, these matches are intentionally confined to ASCII codepoints
" (e.g., "[A-Z]" rather than "[[:upper:]]").
syntax match NoSpellPythonCaps /\v<[A-Z]([A-Z0-9]{-1,}|[a-z0-9]+[A-Z0-9].{-})>/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
" Avoid spell checking snake_case-formatted identifiers.
syntax match NoSpellPythonSnake /\v<\w+_.{-1,}>/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
" Avoid spell checking "@"-prefixed identifiers.
syntax match NoSpellPythonDecorator /\v\@[a-zA-Z].{-}>/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
" Avoid spell checking ":"-delimited substrings.
syntax match NoSpellPythonColons /\v:[^:]+:/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
" Avoid spell checking "`"-delimited substrings.
syntax match NoSpellPythonTicks /\v`[^`]+`/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
" Avoid spell checking '"'-delimited filetyped filenames matched as a
" double-quoted substring containing a filename prefix, a period, and one to
" four characters comprising a filetype.
syntax match NoSpellPythonPath /\v"[^"]+.[^"]{1,4}"/ transparent contained containedin=pythonComment,python.*String contains=@NoSpell
बेशक, उपरोक्त सभी (और संभवतः होना चाहिए) एक गॉडज़िला जैसी नियमित अभिव्यक्ति से मेल खाते एक एकल-लाइनर के लिए कम किया जा सकता है कि कोई भी खुद को कभी भी बनाए रखने या पढ़ने में सक्षम नहीं होगा। सभी की पवित्रता के लिए, मैंने ऐसा नहीं किया।
यदि कोई ऐसा व्यक्ति नहीं है जो अन्य लोकप्रिय भाषाओं में उपरोक्त को विस्तार देते हुए GitHub- होस्टेड Vim प्लगइन बनाना चाहे, तो यह बहुत अच्छा होगा। विम का डिफ़ॉल्ट वर्तनी जाँच कार्यान्वयन लगभग वहाँ है, लोग; इसे सिर्फ ओपन-सोर्स समुदाय से मदद की ज़रूरत है।
तब तक, StackOverflow आपके साथ हमेशा हो सकता है!