অনুসন্ধানের সময় ডায়াক্রিটিক্স / অ্যাকসেন্টগুলি উপেক্ষা করা


12

ভিমকে নির্দেশ দেওয়ার কোনও উপায় আছে যা আমি অনুসন্ধানের সময় ডায়ারট্রিটিক্স / উচ্চারণগুলিকে উপেক্ষা করতে চাই? উদাহরণস্বরূপ, আমি সন্ধান করতে সক্ষম হতে চাই

kočička

প্রবেশ করে

/kocicka

ignorecaseএবং smartcaseঅপশন খুব দরকারী, কিন্তু তারা ডায়াক্রিটিক / কথা সাথে কিছু আছে বলে মনে হচ্ছে না।


3
সম্পর্কিত: :h [[=এবং :h patterns-composing
মুড়ু

উত্তর:


16

@ ইমু মন্তব্যে যেমন উল্লেখ করেছেন , আপনি একটি সমতুল্য শ্রেণি ব্যবহার করতে পারেন (বর্ণিত :help /[[) যা অনুরূপ চরিত্রের সেট হিসাবে মূল্যায়ন করা একটি অক্ষর শ্রেণীর প্রকাশ বলে মনে হয় (যেমন আপনি কোনও অ্যাকসেন্ট / ডায়ারিকটিক অপসারণ করার পরে একই হয়)।

উদাহরণস্বরূপ, একই প্যাটার্নটি সন্ধান করা kočičkaএবং এটি kocickaসহ আপনি এটি ব্যবহার করতে পারেন:

ko[[=c=]]i[[=c=]]ka

চরিত্রটির [[=c=]]জন্য সমতা শ্রেণি কোথায় c


cকোনও অনুসন্ধান সম্পাদন করার সময় আপনি যখনই আঘাত করবেন তখন স্বয়ংক্রিয়ভাবে এই অক্ষর শ্রেণিটি প্রবেশ করানোর জন্য , আপনি এই ম্যাপিংটি ব্যবহার করতে পারেন:

cnoremap <expr> c getcmdtype() =~ '[?/]' ? '[[=c=]]' : 'c'

যা এভাবে নষ্ট হয়ে যেতে পারে:

  • <expr> একটি অভিব্যক্তি মূল্যায়ন টাইপ করুন
  • getcmdtype() =~ '[?/]' আপনি পিছনে বা এগিয়ে অনুসন্ধান লিখছেন কিনা তা পরীক্ষা করুন
  • '[[=c=]]'cপূর্ববর্তী পরীক্ষাটি সফল হলে চরিত্রটির জন্য সমতা শ্রেণিটি ফিরিয়ে দিন
  • 'c'cঅন্যথায় চরিত্রটি ফিরিয়ে দিন

পূর্ববর্তী ম্যাপিংয়ের 2 টি ত্রুটি রয়েছে:

  1. এটি কেবল cচরিত্রটি আবরণ করে
  2. এটি প্যাটার্নটি পড়া কঠিন করে তুলতে পারে

এটি রিম্যাপ <CR>করে এভাবে উন্নতি করা যেতে পারে :

cnoremap <CR> <C-\>e getcmdtype() =~ '[?/]' ? substitute(getcmdline(), '\a', '[[=\0=]]', 'g'): getcmdline()<CR><CR>

যখন আপনি <CR>কোনও অনুসন্ধানের জন্য কোনও প্যাটার্ন লেখার পরে আঘাত করবেন, ম্যাপিংটি সমস্ত বর্ণানুক্রমিক অক্ষরগুলি স্বয়ংক্রিয়ভাবে তাদের সমতুল্য শ্রেণির অংশকে প্রতিস্থাপন করবে।


এর জন্য ম্যাপিং <CR>পূর্ববর্তী ম্যাপিংয়ের অনুরূপ c, এটি যুক্তি ব্যবহার না <expr>করে সিস্টেম ম্যাপিং ব্যতীত <C-\>e
<expr>আপনাকে কোনও অভিব্যক্তির মূল্যায়ন সন্নিবেশ <C-\>eকরতে দেয় , যখন আপনাকে একটি এক্সপ্রেশনের মূল্যায়নের সাথে পুরো কমান্ড লাইনটি প্রতিস্থাপন করতে দেয়।


1
এছাড়াও, যদি আপনি বিপরীত দিকে যেতে চান, যেমন, /kočičkaম্যাচগুলি kocicka, তবে আপনি '[[:lower:][:upper:]]'পরিবর্তে ব্যবহার করতে পারেন '\a'। বিকল্পগুলি '[:alpha:]'এবং '\I'বহু-বাইট অক্ষরগুলির সাথে কাজ করছে বলে মনে হয় না; তবে, '[^[:punct:]]'এটি কাজ করছে বলে মনে হচ্ছে (যদিও আমি কম নিশ্চিত) এবং আমি আপনার নিজের সমতুল্য শ্রেণি (যেমন, '[А-яЁё]') তৈরির অনুমানও করব ।
কেভিনল্লার 21

আমি আশা করি এটির জন্য কোনও ব্যবস্থা ছিল was [[= C =]] ব্যবহার করার সময় কাজ করে তবে মিসটাইপ মানে আপনার ব্যাকস্পেসে 7 বার ক্লিক করতে হবে। পাশাপাশি পাঠযোগ্যতারও ক্ষতি হয়।
ডালিউসড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.