উত্তর:
আপনি কাস্টম বাক্য গঠন নিয়মগুলি যুক্ত করতে পারেন এবং @nospellকীওয়ার্ডটি দিতে পারেন
, এটি ভিমকে এই সিনট্যাক্স ম্যাচে স্পেল চেকিং প্রয়োগ না করার জন্য বলবে। উদাহরণ স্বরূপ:
:syn match UrlNoSpell "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell
উপরেরটি পাঠ্য ফাইল এবং কিছু ফাইল টাইপ (যেমন মার্কডাউন) এর জন্য কাজ করবে তবে সমস্ত ফাইল টাইপের জন্য নয়।
মনে রাখবেন যে আমি এখানে মোটামুটি সরল রেজেেক্স ব্যবহার করেছি; কিছু বিকল্পের জন্য আমি কীভাবে ইউআরএলটির পাঠ্য থেকে পার্স করব তা দেখুন ।
অন্যান্য ফাইল টাইপের জন্য আপনার আরও কিছুটা কাজ করা দরকার। উদাহরণস্বরূপ, 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=এই জন্য চেহারা তেজ বলে
UrlNoSpellRegex মধ্যেpythonComment ম্যাচ।
highlightসঠিক রঙ সেট করতে আমাদেরও প্রয়োজন , যেহেতু এগুলি উত্তরাধিকারসূত্রে পাওয়া যায় নি।
আপনাকে বেশ কয়েকটি জায়গায় এটি করতে হবে, উদাহরণস্বরূপ পাইথন স্ট্রিংয়ের জন্য:
:syn match UrlNoSpellString "\w\+:\/\/[^[:space:]]\+" contains=@NoSpell containedin=pythonString
:highlight def link UrlNoSpellString String
আমাদের দুটি পৃথক সিনট্যাক্স ম্যাচ গ্রুপ দরকার তাই আমরা সঠিক সিনট্যাক্স হাইলাইটিং প্রয়োগ করতে পারি।
অবশ্যই, অন্যান্য ফাইলস্টাইপের জন্য আপনার অন্যান্য 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>
ভাল পরীক্ষিত তেজ নিচে snippet বুদ্ধিমত্তার এড়াতে পাইথন মতামত ও স্ট্রিং মধ্যে নিম্নলিখিত সমস্ত বানান পরীক্ষার:
CamelCase শনাক্তকারী।snake_case শনাক্তকারী।UPPERCASE শনাক্তকারী।@-প্রিফিক্স শনাক্তকারী (যেমন, @muhdecorator)।"-নির্দিষ্ট ফাইল টাইপ করা ফাইলের নাম (যেমন, "muh_module.py")।:-সীমাবদ্ধ সাবস্ট্রিংগুলি (যেমন, :func:ইন: ফানক:: রি.সুব)।re.subইন: ফানক: `রি.সুব)।আপনার ব্যবহারকারী-নির্দিষ্ট ~/.vim/after/syntax/python.vimফাইলে নিম্নলিখিত কয়েকটি বা সমস্ত যুক্ত করুন এবং ভিম প্রকৃত বানানটি একবারে রাইটস্টফ once যাচাই করে আনন্দে আনন্দিত হয়:
" 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
অবশ্যই, উপরের সমস্তগুলি (এবং সম্ভবত হওয়া উচিত) একটি গডজিলার মতো নিয়মিত প্রকাশের সাথে মিলে যাওয়া একক এক-লাইনারে পরিণত হতে পারে যা আমাকে সহ কেউই কখনও বজায় রাখতে বা পড়তে সক্ষম হবে না। সবার সন্তুষ্টির জন্য, আমি এটি করিনি।
যদি কেউ আমার মতো না হয় তবে উপরেরটি অন্যান্য জনপ্রিয় ভাষাগুলিতে প্রসারিত একটি গিটহাব-হোস্ট করা ভিম প্লাগইন তৈরি করতে চাইলে, এটি দুর্দান্ত। ভিমের ডিফল্ট স্পেল পরীক্ষার বাস্তবায়ন প্রায় আছে, ভাবেন; এটির জন্য কেবল মুক্ত-উত্স সম্প্রদায়ের সাহায্যকারী হাত প্রয়োজন।
ততক্ষণ, স্ট্যাক ওভারফ্লো সর্বদা আপনার সাথে থাকতে পারে!