উত্তর:
Vim's: g কমান্ড ঠিক এই ধরণের টাস্কের জন্য ডিজাইন করা হয়েছে; প্রতিটি লাইনে একটি একক ক্রিয়াকলাপ চলছে যা একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে। আমার উত্তর এখানে:
:g/.\n\n\@!/norm o
আমি যে প্যাটার্নটি ব্যবহার করি তা হ'ল /.\n\n\@!/
। এটির উপাদানগুলির টুকরো টুকরো টুকরো করা:
.
লাইনের যে কোনও চরিত্রের সাথে মেলে। (অবিলম্বে বিবেচনা থেকে কোনও বিদ্যমান খালি লাইন বাতিল করতে ব্যবহৃত)\n
উপরের অক্ষরের শেষে একক Mat n এর সাথে মেলে\n\@!
ম্যাচটি ব্যর্থ হয় যদি এর আগে \ n এর পরপরই অন্য কোনও \ n থাকে। N।( নিয়মিত প্রকাশে :h E59
আরও তথ্যের জন্য \@!
এবং অনুরূপ ম্যাচের স্পেসিফায়ারগুলি দেখুন - আরও কয়েকজন রয়েছেন!)
সুতরাং: g কমান্ডের রেজেক্স এখন প্রতিটি অ-ফাঁকা লাইন নির্বাচন করেছে যা একটি একক নিউলাইন দ্বারা বন্ধ করা হয়, এবং যা খালি লাইন অনুসরণ করে না।
একটি :g
বিবৃতিতে প্যাটার্নের পরে মিলিত লাইনে চলার জন্য আদেশ আসে। এই ক্ষেত্রে, আমি এটিকে একটি সাধারণ মোড কমান্ড norm
চালিত করতে বলেছি (সংক্ষেপে ), এবং চালানোর জন্য কমান্ডটি সহজ o
, যা বর্তমান লাইনের নীচে একটি ফাঁকা লাইন সন্নিবেশ করে।
সুতরাং একসাথে নেওয়া, কমান্ডটি প্রতিটি লাইন খুঁজে বের করে যার নীচে খালি লাইন নেই এবং একটি যুক্ত করে। এবং এটুকুই আছে! আপনি যে অভিনব জিনিসগুলি করতে পারেন তার জন্য আপনি উইম উইকির পাওয়ার অফ জি নিবন্ধটি পরীক্ষা করতে পছন্দ করতে পারেন :g
(এবং এটি নেতিবাচক বোন, :v
) - এটি আশ্চর্যজনকভাবে দরকারী কমান্ডগুলির মধ্যে একটি যা আপনি শীঘ্রই নির্ভর করতে বাড়াতে পারেন, এবং তারপরে সম্পাদকগুলিতে ভয়াবহভাবে মিস করবেন যা এটা নেই।
:%s/$/
, তারপরে আঘাত করুন ^V
, তারপরে আঘাত করুন Enter
।
:%s/$/<C-V><CR><CR>
( কীপ্রেসের সাধারণ ভিএম -লোক এনকোডিং ব্যবহার করার জন্য), সেই পদ্ধতির প্রতিটি লাইনের পরে একটি নতুন লাইন যুক্ত হয়। এটি হ'ল লাইনগুলি যা ইতিমধ্যে ফাঁকা দ্বারা পৃথক করা হয়েছে (লাইন 3 -> লাইন 4 দেখুন, উদাহরণে পাঠ্যটিতে) অতিরিক্ত ফাঁকা লাইন পেয়ে বাতাস আপ করে। মূল প্রশ্নটি হ'ল অতিরিক্ত ফাঁকা রেখা যুক্ত করা এড়ানো উচিত যেখানে তারা ইতিমধ্যে প্রারম্ভিক পাঠ্যে বিদ্যমান ছিল।
আমি যখন নীলফোরস্টার বিশ্বব্যাপী অনুসন্ধান এবং উত্তরটি প্রতিস্থাপন করেছি তখন আমি দেখতে পেলাম যে রেখাগুলিতে কেবল একটির অক্ষর থাকলে পরপর অ-ফাঁকা রেখাগুলিতে প্রতি দ্বিতীয় উদ্দেশ্যযুক্ত প্রতিস্থাপনটি এটি মিস করে। এটি আগের অনুষ্ঠানের সাথে মিলিত শেষ চরিত্রের পরে প্রতিটি উপলক্ষে মিলতে শুরু করার প্যাটার্নের কারণে এটি প্রদর্শিত হচ্ছে ।
লুকবিহ্যান্ড এবং লুক হেড ব্যবহার করা এই সমস্যাটি সমাধান করে এবং রেজেক্সকে কিছুটা ছোট করে তোলে:
:%s/\n\@<!\n\n\@!/\r\r/g
\n\@<!\n
অর্থ এমন কোনও লাইন ব্রেক যা অন্য লাইন ব্রেকের পরে ঠিক নয়? তবে আমি বুঝতে পারছিলাম না এর \n\@!
অর্থ কী । আমি এটি বুঝতে চাই যাতে আমি এটি অন্যান্য অনুসন্ধানের নিদর্শনগুলিতে শিখতে এবং প্রয়োগ করতে পারি :)
\n\@<!\n
এমন কোনও লাইন ব্রেক যা তাত্ক্ষণিকভাবে অন্য লাইন ব্রেককে অনুসরণ করে না। \n\@!
পূর্ববর্তী পরমাণু (অর্থাত্ \n
) অনুসরণ করা ঠিক তার আগে মেলে না, তবে শূন্য প্রস্থের সাথে মেলে। :help \@<!
এই বিষয়ে ডকুমেন্টেশন দেখার চেষ্টা করুন । আমি
অন্য উপায়:
%s/\(.\)\n\(.\)/\1\r\r\2/
যার অর্থ,
\(.\) match and capture a non-newline character,
\n match a newline
\(.\) match and capture a non-newline character
এর সাথে প্রতিস্থাপন করুন: প্রথম ক্যাপচার, ডাবল নিউলাইনস এবং দ্বিতীয় ক্যাপচার।
উদাহরণস্বরূপ, line1\nLine2
ফলাফল \1 = 1
এবং \2 = L
।
আমি ভুল হলে আমাকে সংশোধন করুন। আমি বিশ্বাস করি আপনি যখন লাইনটি সরানোর জন্য কমান্ড মোডে অক্ষরটি কে ব্যবহার করেন। তারপরে সন্নিবেশ মোডটি প্রবেশ করুন এবং পরবর্তী লাইন যুক্ত করুন। প্রয়োজনীয় হিসাবে পুনরাবৃত্তি? আশাকরি এটা সাহায্য করবে!
k
একটি লাইন আপ সরানো j
একটি রেখা নিচে সরানো।
/[^\n]\n[^\n]
:map <F2> no<esc><F2>
তারপরে টিপুন <F2>
। এটি পরপর দুটি অ-ফাঁকা লাইন অনুসন্ধান করবে এবং তারপরে বারবার তাদের মধ্যে একটি লাইন যুক্ত করবে।
সম্পাদনা:
এটি একক, বৈশ্বিক অনুসন্ধান এবং প্রতিস্থাপনের মাধ্যমে এটি করার বিকল্প উপায়:
:%s/\([^\n]\)\n\([^\n]\)/\1\r\r\2/g
এই আদেশটি ( 16
অক্ষরগুলি) ব্যবহার করে দেখুন:
:%!sed G|cat -s
:%norm o
তবে এটি সার্থক হয় যে এটি এর ক্ষেত্রে যেমন কাজ করে তেমন কাজ করে নাo
। +1