স্পেল ফাইলে ইউআরএল এবং ইমেল ঠিকানা উপেক্ষা করুন


12

বানানের ত্রুটি হিসাবে ভিএমটি এইচটিটিপি ইউআরএল এবং ইমেল ঠিকানাগুলি পতাকাঙ্কিত না করার উপায় আছে কি? অথবা, আরও সাধারণভাবে, বৈধ বানানগুলির রেজিেক্সগুলি তালিকাভুক্ত করার একটি উপায়?

উত্তর:


16

আপনি কাস্টম বাক্য গঠন নিয়মগুলি যুক্ত করতে পারেন এবং @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:)।


3

মার্টিন 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:ইন: ফানক:: রি.সুব)।
  • d -নির্দিষ্ট সাবস্ট্রিংগুলি (উদাহরণস্বরূপ, 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

অবশ্যই, উপরের সমস্তগুলি (এবং সম্ভবত হওয়া উচিত) একটি গডজিলার মতো নিয়মিত প্রকাশের সাথে মিলে যাওয়া একক এক-লাইনারে পরিণত হতে পারে যা আমাকে সহ কেউই কখনও বজায় রাখতে বা পড়তে সক্ষম হবে না। সবার সন্তুষ্টির জন্য, আমি এটি করিনি।

যদি কেউ আমার মতো না হয় তবে উপরেরটি অন্যান্য জনপ্রিয় ভাষাগুলিতে প্রসারিত একটি গিটহাব-হোস্ট করা ভিম প্লাগইন তৈরি করতে চাইলে, এটি দুর্দান্ত। ভিমের ডিফল্ট স্পেল পরীক্ষার বাস্তবায়ন প্রায় আছে, ভাবেন; এটির জন্য কেবল মুক্ত-উত্স সম্প্রদায়ের সাহায্যকারী হাত প্রয়োজন।

ততক্ষণ, স্ট্যাক ওভারফ্লো সর্বদা আপনার সাথে থাকতে পারে!


2
আমি এখানে উত্তর লেখার সময় এই পুরো ভিম সিনট্যাক্স হাইলাইট করার জিনিসটি খুঁজে পেয়েছি। আমি সর্বদা জানতাম না যে আমি সৎ হওয়ার জন্য কী করছিলাম, তাই বিশেষত কিছু পুরানো উত্তরগুলি অনুকূল-তুলনায় কম 😅
মার্টিন টর্নয়েজ

আপনি খুব বিনয়ী, মার্টিন। আপনার "বরফ ভাঙ্গা" উত্তর না থাকলে, আমি এবং আরও অনেকেই কোথা থেকে শুরু করব তাও জানতাম না। এই সম্পাদক পার্টি শুরু করার জন্য ধন্যবাদ! রোম একটি দিনে তৈরি করা নাও হতে পারে, তবে কমপক্ষে আমরা এখনই এটি একটিতে পরীক্ষা করে দেখতে পারি।
সিসিল কারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.