কীভাবে: g /^$/,///- j (একা ফাঁকা একাধিক ফাঁকা রেখা কমান) ভিমে কাজ করে?


21

নিবন্ধে, ভিম নিয়মিত অভিব্যক্তিগুলিতে , ওলেগ রাইস্কি একটি ফাঁকাতে একাধিক ফাঁকা রেখা হ্রাস করার জন্য নিম্নলিখিত কমান্ডটি দিয়েছেন:

:g/^$/,/./-j

কেউ দয়া করে বর্ণনা করতে পারেন কীভাবে এটি কাজ করে?

আমি :gআদেশ এবং নিয়মিত এক্সপ্রেশন জানি । কিন্তু পার্টটি কী করে তা আমি বুঝতে পারি নি /,/./-j

উত্তর:


24

এটি সত্যিই বেশ বুদ্ধিমান। আসুন এটি ভেঙে দিন। exহুকুম

g/^$/xyzzy

সমস্ত খালি লাইন অনুসন্ধান করবে এবং তাদের প্রত্যেকের উপর xyzzyআদেশ (একটি স্বেচ্ছাসেবক exকমান্ড) কার্যকর করবে। নোট করুন যে xyzzyএটি আসল ex কমান্ড নয়, পরবর্তী অনুচ্ছেদ অনুযায়ী এটি কেবল স্থানধারক হিসাবে রয়েছে।

এখানে জটিল xyzzyকিছু হ'ল আপনার ক্ষেত্রে "কমান্ড" হ'ল আর একটি অনুসন্ধান আদেশ:

,/./-j

,/./-একটি সীমার নির্দিষ্ট করে। এটি ফর্মের <start>,<end>এবং, কারণ কমা এর আগে কিছুই ছিল না, এটি বর্তমান লাইনটি ধরে নিয়েছে (যেখানে আপনি ফাঁকা রেখাটি খুঁজে পেয়েছেন) এটিই শুরু।

কমা হওয়ার পরে /./-যার অর্থ পরবর্তী অক্ষরটি অনুসন্ধান করা ( .যার অর্থ কোনও চরিত্র) তারপরে একটি লাইন ব্যাক আপ করুন ( কোনও মান না দেওয়া থাকলে একটিটি অন্তর্নিহিত হওয়ার /./-জন্য সংক্ষিপ্ত /./-1)। আপনি যে প্যাটার্নটি .চালাচ্ছেন তা অনুসরণ করে প্রথম নন-ফাঁকা লাইনে আপনি পাবেন।

অন্য কথায়, পরিসীমাটির শেষে হ'ল আপনি বর্তমানে যে অপারেটিং করছেন তার পরে বা তার পরে সর্বশেষ ফাঁকা রেখা।

তারপরে আপনি এই ব্যাপ্তির উপর একটি যোগদান চালাবেন।

যদি পরিসীমাটির শুরু এবং শেষ সমান হয় (কেবলমাত্র একটি ফাঁকা রেখাটি বিভাগে ছিল), যোগ দিন কিছুই হয় না। যদি তারা সমান না হয় তবে তাদের সাথে যোগ দিন।

এটি একাধিক ফাঁকা রেখা একত্রিত করে ines

একটি উদাহরণটি দেখে নেওয়া যাক (লাইন সংখ্যাগুলি কেবল ব্যাখ্যার জন্য, তারা আসল ফাইলে নেই):

1 Line 1
2
3 Line 3
4 Line 4
5
6
7
8
9 Line 9

g/^$/কমান্ড সব খালি লাইন খুঁজে পেতে এবং তাদের উপর তার অপারেশন সঞ্চালন (এই লাইন 2, 5, 6, 7 ও 8 হয়) হবে।

লাইন 2 এর জন্য, 2 ,/./-jথেকে 2 পর্যন্ত সীমা স্থাপন করবে (পরেরটি .3 লাইনে পাওয়া যাবে তারপর 2 পেতে 1 বিয়োগ করবে)। 2,2 ব্যাপ্তিটিতে যোগদান একটি কিছুই করে না।

5 নং লাইনের জন্য, ,/./-j5 থেকে 8 পর্যন্ত সীমা নির্ধারণ করবে (পরবর্তী .9 লাইনে পাওয়া যাবে তারপর 1 টি বিয়োগ করুন)। 5,8 রেঞ্জের একটি জোড় সেই সমস্ত লাইনে একসাথে যোগদান করবে।

আগের অপারেশনের অংশ হিসাবে অদৃশ্য হয়ে যাওয়া লাইনে অপারেশন করা হয় না। এর কারণ এটি চক্রের পূর্বে মুছে ফেলা লাইনগুলি প্রক্রিয়া করার কোনও অর্থ রাখে না।

অন্য কথায়, 6 থেকে 8 লাইনগুলি মুছে ফেলা হয়েছে (লাইন 5 এর সাথে সংযুক্ত), গ্লোবাল কমান্ড এর পরে তাদের উপর কাজ করে না।

এটি vimডকুমেন্টেশনে দুটি পাসের অ্যালগরিদমকে বর্ণনা করে, একটি লাইন চিহ্নিত করে, একটি অপারেশন সম্পাদন করে on


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