আমি মনে করি নিম্নলিখিত কমান্ডটি কাজ করা উচিত:
:%s/^\(.*\)\(\n\1\)\+$/\1/
ব্যাখ্যা:
আমরা পরিবর্তন করতে পুরো ফাইলের উপর প্রতিকল্পন কমান্ড ব্যবহার pattern
মধ্যে string
:
:%s/pattern/string/
এখানে pattern
হয় ^\(.*\)\(\n\1\)\+$
এবং string
হয় \1
।
pattern
এভাবে ভেঙে যেতে পারে:
^\(subpattern1\)\(subpattern2\)\+$
^
এবং $
যথাক্রমে লাইনটির শুরু এবং লাইনের শেষের সাথে মেলে।
\(
এবং \)
ঘেরে দেওয়ার জন্য ব্যবহৃত হয় subpattern1
যাতে আমরা পরে বিশেষ নম্বর দ্বারা এটি উল্লেখ করতে পারি \1
।
এগুলি ঘেরেও ব্যবহৃত হয় subpattern2
যাতে আমরা কোয়ানটিফায়ার দিয়ে এটি 1 বা আরও বেশিবার পুনরাবৃত্তি করতে পারি \+
।
subpattern1
হয় .*
.
নতুন লাইন ছাড়া কোনো চরিত্র মিলে একটি metacharacter এবং *
একটি কোয়ান্টিফায়ার যে শেষ অক্ষর 0, 1 বা একাধিকবার ম্যাচ হয়।
সুতরাং .*
কোনও নতুন লাইন থাকা কোনও পাঠ্যের সাথে মেলে।
subpattern2
হয় \n\1
\n
নতুন লাইন মিলে যায় এবং \1
একই পাঠ্য ভিতরে প্রথম মিলে যাওয়া হয়েছিল ম্যাচ \(
, \)
এখানে যা subpattern1
।
সুতরাং pattern
এটি পড়তে পারেন:
লাইনের একটি সূচনা ( ^
) এর পরে কোনও নতুন লাইন ( .*
) এর পরে কোনও নতুন লাইন ( \n
) তারপরে একই পাঠ্য ( \1
), দ্বিতীয়টি এক বা একাধিকবার পুনরাবৃত্তি করা হয় ( \+
) এবং অবশেষে লাইনের একটি সমাপ্তি ( $
) ।
যেখানেই pattern
মিলছে (অভিন্ন লাইনের একটি ব্লক), সাবস্টিটিউশন কমান্ড এটির পরিবর্তে string
এখানে যা এখানে রয়েছে \1
(ব্লকের প্রথম লাইন)।
আপনি যদি নিজের ফাইলটিতে কোনও পরিবর্তন না করেই কোন লাইনগুলির ব্লকগুলি প্রভাবিত করতে চান তা দেখতে, আপনি hlsearch
বিকল্পটি সক্ষম করতে n
এবং আদেশের শেষে বিকল্পের পতাকাটি যুক্ত করতে পারেন :
:%s/^\(.*\)\(\n\1\)\+$/\1/n
আরও দানাদার নিয়ন্ত্রণের জন্য, c
পরিবর্তে প্রতিস্থাপনের পতাকাটি যুক্ত করে প্রতিটি লাইনের লাইনের পরিবর্তনের পূর্বে আপনি একটি নিশ্চয়তা চাইতে পারেন :
:%s/^\(.*\)\(\n\1\)\+$/\1/c
প্রতিকল্পন কমান্ড পঠিত সম্পর্কে আরো তথ্যের জন্য :help :s
,
প্রতিকল্পন পতাকা জন্য :help s_flags
,
বিভিন্ন metacharacters এবং quantifiers জন্য পড়া :help pattern-atoms
,
এবং জন্য তেজ নিয়মিত এক্সপ্রেশন পড়া এই ।
সম্পাদনা করুন: ওয়াইল্ডকার্ড কমান্ডের $
শেষে একটি যুক্ত করে সমস্যা সমাধান করেছে pattern
।
এছাড়াও ব্লাডগেইনের একই কমান্ডের একটি সংক্ষিপ্ত এবং আরও পঠনযোগ্য সংস্করণ রয়েছে।
$
যদিও আপনার কমান্ড এটিতে একটি প্রয়োজন । অন্যথায় এটি পূর্ববর্তী লাইনে অভিন্ন পাঠ্যের সাথে শুরু হওয়া লাইনের সাহায্যে অপ্রত্যাশিত জিনিসগুলি করবে তবে এতে কিছু অন্যান্য অক্ষর রয়েছে। এছাড়াও নোট করুন যে আপনি যে বেসিক কমান্ডটি দিয়েছেন তা আমার উত্তরটির সাথে কার্যকরভাবে সমান:%!uniq
, তবে হাইলাইট এবং নিশ্চিতকরণের পতাকাগুলি দুর্দান্ত।