ভিম - লাইনের মধ্যে ফাঁকা লাইন যুক্ত করা


15

আমি কীভাবে প্রতিটি খালি লাইনের মধ্যে একটি ফাঁকা রেখা সন্নিবেশ করব?

যেমন। থেকে

line 1
line 2
line 3

line 4
line 5

প্রতি

line 1

line 2

line 3

line 4

line 5

উত্তর:


27

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) - এটি আশ্চর্যজনকভাবে দরকারী কমান্ডগুলির মধ্যে একটি যা আপনি শীঘ্রই নির্ভর করতে বাড়াতে পারেন, এবং তারপরে সম্পাদকগুলিতে ভয়াবহভাবে মিস করবেন যা এটা নেই।


1
অবিকল। আমি সাধারণত শর্টহ্যান্ডগুলির সন্ধান করি :%norm oতবে এটি সার্থক হয় যে এটি এর ক্ষেত্রে যেমন কাজ করে তেমন কাজ করে না o। +1
সেপ্টেম্বর 7'13

টাইপ করুন :%s/$/, তারপরে আঘাত করুন ^V, তারপরে আঘাত করুন Enter
jpaugh

1
@ জেপোফ ধরে নিচ্ছেন যে আপনার অর্থ :%s/$/<C-V><CR><CR>( কীপ্রেসের সাধারণ ভিএম -লোক এনকোডিং ব্যবহার করার জন্য), সেই পদ্ধতির প্রতিটি লাইনের পরে একটি নতুন লাইন যুক্ত হয়। এটি হ'ল লাইনগুলি যা ইতিমধ্যে ফাঁকা দ্বারা পৃথক করা হয়েছে (লাইন 3 -> লাইন 4 দেখুন, উদাহরণে পাঠ্যটিতে) অতিরিক্ত ফাঁকা লাইন পেয়ে বাতাস আপ করে। মূল প্রশ্নটি হ'ল অতিরিক্ত ফাঁকা রেখা যুক্ত করা এড়ানো উচিত যেখানে তারা ইতিমধ্যে প্রারম্ভিক পাঠ্যে বিদ্যমান ছিল।
ট্রেভর পাওয়েল

3

আমি যখন নীলফোরস্টার বিশ্বব্যাপী অনুসন্ধান এবং উত্তরটি প্রতিস্থাপন করেছি তখন আমি দেখতে পেলাম যে রেখাগুলিতে কেবল একটির অক্ষর থাকলে পরপর অ-ফাঁকা রেখাগুলিতে প্রতি দ্বিতীয় উদ্দেশ্যযুক্ত প্রতিস্থাপনটি এটি মিস করে। এটি আগের অনুষ্ঠানের সাথে মিলিত শেষ চরিত্রের পরে প্রতিটি উপলক্ষে মিলতে শুরু করার প্যাটার্নের কারণে এটি প্রদর্শিত হচ্ছে ।

লুকবিহ্যান্ড এবং লুক হেড ব্যবহার করা এই সমস্যাটি সমাধান করে এবং রেজেক্সকে কিছুটা ছোট করে তোলে:

:%s/\n\@<!\n\n\@!/\r\r/g

ধন্যবাদ! এটি কাজ করে, এবং যদি আমি আবার অনুসন্ধান চালাই তবে এটি আরও লাইন যুক্ত করে না (যদি বলি, আমি আমার ফাইলে নতুন লাইন যুক্ত করেছি)।

1
আপনি কী কী ব্যাখ্যা করতে পারবেন অনুসন্ধানের প্যাটার্নের প্রতিটি রেজেক্সের অর্থ? ভিআইএম সাহায্যের দিকে তাকানো, এর \n\@<!\nঅর্থ এমন কোনও লাইন ব্রেক যা অন্য লাইন ব্রেকের পরে ঠিক নয়? তবে আমি বুঝতে পারছিলাম না এর \n\@!অর্থ কী । আমি এটি বুঝতে চাই যাতে আমি এটি অন্যান্য অনুসন্ধানের নিদর্শনগুলিতে শিখতে এবং প্রয়োগ করতে পারি :)

হ্যাঁ, \n\@<!\nএমন কোনও লাইন ব্রেক যা তাত্ক্ষণিকভাবে অন্য লাইন ব্রেককে অনুসরণ করে না। \n\@!পূর্ববর্তী পরমাণু (অর্থাত্ \n) অনুসরণ করা ঠিক তার আগে মেলে না, তবে শূন্য প্রস্থের সাথে মেলে। :help \@<!এই বিষয়ে ডকুমেন্টেশন দেখার চেষ্টা করুন । আমি
সাইমন

3

অন্য উপায়:

%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


0

আমি ভুল হলে আমাকে সংশোধন করুন। আমি বিশ্বাস করি আপনি যখন লাইনটি সরানোর জন্য কমান্ড মোডে অক্ষরটি কে ব্যবহার করেন। তারপরে সন্নিবেশ মোডটি প্রবেশ করুন এবং পরবর্তী লাইন যুক্ত করুন। প্রয়োজনীয় হিসাবে পুনরাবৃত্তি? আশাকরি এটা সাহায্য করবে!


kএকটি লাইন আপ সরানো jএকটি রেখা নিচে সরানো।
নিল ফররেস্টার

হ্যাঁ, সত্যিই তা করে। আমার ভুল. ধন্যবাদ নীল!

0
/[^\n]\n[^\n]
:map <F2> no<esc><F2>

তারপরে টিপুন <F2>। এটি পরপর দুটি অ-ফাঁকা লাইন অনুসন্ধান করবে এবং তারপরে বারবার তাদের মধ্যে একটি লাইন যুক্ত করবে।

সম্পাদনা:

এটি একক, বৈশ্বিক অনুসন্ধান এবং প্রতিস্থাপনের মাধ্যমে এটি করার বিকল্প উপায়:

:%s/\([^\n]\)\n\([^\n]\)/\1\r\r\2/g

আমার ফাইলে প্রচুর লাইন রয়েছে। পুরো ফাইলটির জন্য কোনও রেজেক্স অনুসন্ধান এবং ফাঁকা লাইন toোকানোর কোনও উপায় আছে কি? আমি স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 2673209/… দেখছি কিন্তু সমস্ত রেজেক্স কমান্ডের অর্থ কী তা বুঝতে পারি নি।

একটি একই কমান্ডে এবং পুনরাবৃত্ত ম্যাপিং ছাড়াই একই জিনিসটি সম্পাদনের বিকল্প উপায়ের জন্য আমার উপরের সম্পাদনাটি দেখুন। যদিও প্রথম ফাইলটির পুরো ফাইলটির জন্য কাজ করা উচিত।
নিল ফররেস্টার

0

এই আদেশটি ( 16অক্ষরগুলি) ব্যবহার করে দেখুন:

:%!sed G|cat -s

একটি শর্ট কমান্ড "ভিমগল্ফ" করার চেষ্টা করার পরিবর্তে, বরং ব্যবহৃত অস্পষ্ট বিকল্পগুলির একটি সামান্য ব্যাখ্যা আরও সহায়ক হবে।
ইনগো কারকাত

0

আমি জানি না আপনার ফাইলটি কত দিন তবে সবচেয়ে সহজ পদ্ধতির একটি হ'ল oকমান্ড মোডে টাইপ । এবং পরের লাইনে .। এটি সাধারণ ম্যাক্রোতে লোড হতে পারে।

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