অটো হাইলাইট করে অভিন্ন লাইনের পাঠ্য


13

আমি একটি দক্ষ ভিম নিনজা কিছুক্ষণ আগে এটি করতে দেখেছি তবে আমার কোনও ধারণা নেই যে এটি শুরু করা উচিত।

ক) ভিমস ব্যাকগ্রাউন্ড কালার সেট করার কোনও উপায় আছে যাতে অভিন্ন সামগ্রীর সাথে একটানা লাইনগুলি হাইলাইট হয়।

খ) যদি কেউ জানে যে কীভাবে এটি করতে হয় তবে এটির জন্য একটি দুর্দান্ত টুইটটি হ'ল যদি হাইলাইটিংটি ধারাবাহিক লাইনে ঘটে তবে কেবলমাত্র প্রথম শব্দটি বিবেচনা করুন (পুরো লাইনটি নয়)।

হাইলাইটিংটি বিভিন্ন রঙে কনফিগার করা যেতে পারে কিনা তা দ্বিতীয় স্নাতক চিহ্নটি ম্যাচের লাইনের সংখ্যার ভিত্তিতে ব্যবহার করা হয় (বা AB এর উপর নির্ভর করে শব্দগুলি সক্রিয় রয়েছে)। সুতরাং আমাদের মধ্যে কেবল দুটি টানা লাইন রয়েছে যা সবুজ, 3-5 টি পরপর রেখার পরে কমলা, 6+ তারপরে লাল match


অনুরূপ পোস্ট:
রিজেক্স

উত্তর:


10

নিম্নলিখিত matchসেটগুলি (এ) এর জন্য কাজ করছে বলে মনে হচ্ছে:

:syn match Low /\v(.+)\n(\1\n)/
:syn match Medium /\v(.+)\n(\1\n){2,4}/
:syn match Critical /\v(.+)\n(\1\n){5,}/
:hi Critical  ctermfg=red
:hi Medium  ctermfg=yellow
:hi Low  ctermfg=green

মনে হচ্ছে এখানে আদেশটি অত্যন্ত গুরুত্বপূর্ণ। যদি ম্যাচগুলি Lowবা Mediumম্যাচগুলি পরে আসে Critical, তবে এটির আলগা প্রয়োজনীয়তাগুলি গ্রাহ্য হয় এবং একইভাবে Lowকব্জির জন্য Medium

হাইলাইটিংটি তৃতীয় বা 6th ষ্ঠ দ্বীপ লাইন যুক্ত করার পরে অবিলম্বে উপস্থিত হবে না, তবে একবার যুক্ত করার পরে আপনি কিছুটা ঘুরে যান। আমি নিশ্চিত না যে এটিকে ঠিক কীভাবে ট্রিগার করে।

বি এর জন্য, আমি ধারণা করি আপনি এর সাথে রেজেক্সটি প্রতিস্থাপন করতে পারেন:

/\v(\S+).*\n(\1.*\n)/

সাধারণভাবে, সমস্ত প্রতিস্থাপন (.*)সঙ্গে (\S+).*এবং \1সঙ্গে \1.*, অথবা যাই হোক না কেন আপনার জন্য একটি শব্দ গঠন করে।


আমি এই উত্তরটি টিক দিয়েছি কারণ আমার কাছে কীভাবে হাইলাইটিংটি প্রয়োজন তা কীভাবে করা যায় (প্রশ্ন দ্বারা প্রকাশিত)। @ ম্যাটগুলি নিয়মিত প্রকাশটি চমৎকার তবে আমি জিজ্ঞাসা করা প্রকৃত প্রশ্নের উত্তর দেয় না (হাইলাইটিং পরিবর্তন করা)।
মার্টিন ইয়র্ক

8

শুরুর দিক হিসাবে, এখানে একটি সন্ধানের প্যাটার্ন যা সদৃশ লাইনের সাথে মেলে (শীর্ষস্থানীয় সাদা জায়গার পরিবর্তনগুলি উপেক্ষা করে):

              \zs                marks start of the pattern. Everything before here will not be highlighted
 ^                               start of the line
  \s*                            leading whitespace
       .\+                       match 1 or more non-newline characters
     \(   \)                     and use parens to capture this in match group 1

            \n                   match the newline character
                 \(        \)\+  1 or more
                      \1         copies of what was in the match group 1
                   \s*  \n       with leading whitespace followed by a newline
/^\s*\(.\+\)\n\zs\(\s*\1\n\)\+   the full regex

:help pattern এটি কীভাবে পুনরায় তৈরি করা যায় সে সম্পর্কে আরও তথ্য সরবরাহ করবে

:help syntax এই নিয়মিত ভাবটি কীভাবে গ্রহণ করবেন এবং কীভাবে এটি আপনার জন্য হাইলাইট করা হবে তা কীভাবে রূপান্তর করবেন তা আপনাকে দেখায়

সিনট্যাক্স স্ক্রিপ্টগুলি লিখতে শেখা কঠিন হতে পারে, সুতরাং একটি ভাল স্বল্পমেয়াদী সমাধানটি 'ফ্লাই'তে এটি করা নিশ্চিত করে নিশ্চিত করা 'incsearch'হয় যাতে অনুসন্ধানগুলি হাইলাইট হয় এবং উপরের অনুসন্ধানটি করার জন্য একটি কী ম্যাপিং করা হয়, অর্থাৎnnoremap <F5> /^\s*\(.\+\)\n\zs\(\s*\1\n\)\+<CR>


রেগেক্স বিতরণ করার মতো কিছু স্বয়ংক্রিয় উপায় আছে কি? এটি এমন একটি পরিষ্কার চিত্রায়ন সরবরাহ করে।
মুরু

1
আমি হাতে হাতে এটি করছি। ভিমের সবচেয়ে সহজ দ্রুততম উপায় yy10pহ'ল সম্পূর্ণ রেজেক্সের সাথে লাইনে এমন কিছু করা তারপরে আপনি যে অংশগুলি সরাতে এবং হিট করতে চান তা নির্বাচন করুন r<space>। কিছুটা গতি বাড়ানোর জন্য সম্ভবত আমি এই পংক্তির নির্বাচন ব্যতীত সমস্ত কিছু ফাঁক দিয়ে প্রতিস্থাপন করার জন্য একটি কমান্ড যুক্ত করব।
ম্যাট বোহেম

কি দারুন! বেশ কিছুটা চেষ্টা!
মুরু

1
এটিকে কিছুটা দ্রুত করার জন্য আমি একটি (সত্যিই কুৎসিত) ভিম ফাংশন করেছি: gist.github.com/mattboehm/da63a48eedf6f14375aa । একটি লাইন নির্বাচন করুন, হিট করুন ,rতারপর <space>সাধারণ / ভিজ্যুয়াল মোডের সাথে একসাথে লাইনগুলিতে যোগদান করুন।
ম্যাট বোহেম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.