আমি কীভাবে ভিমে একাধিক লাইনে সম্পাদনার পুনরাবৃত্তি করব?


122

আমি সচেতন যে ভিমে আমি প্রায়শই একটি কমান্ডের সামনে কেবল একটি সংখ্যা যুক্ত করে পুনরাবৃত্তি করতে পারি। উদাহরণস্বরূপ, কেউ এর দ্বারা 5 টি লাইন মুছে ফেলতে পারে:

5dd

উদাহরণস্বরূপ একটি কমান্ড প্রয়োগ করতে লাইনগুলির বিস্তৃতি নির্দিষ্ট করা প্রায়শই সম্ভব

:10,20s:hello:goodbye:gc

আমি কীভাবে 'উল্লম্ব সম্পাদনা' সম্পাদন করতে পারি? আমি চাইব, উদাহরণস্বরূপ, একটি নির্দিষ্ট চিহ্ন সন্নিবেশ করানো, একটি কমা বলতে, ভিক্ষার সময় (সাদা জায়গা ছেড়ে যাওয়া, অর্থাৎ আপনি শিফট -১-এর পরে কমান্ড মোডে কমা টাইপ করলে আপনি কী পাবেন) একটি প্রদত্ত প্রতিটি লাইনের পরিসীমা। কীভাবে এটি (ডাউন-পিরিয়ড-ডাউন-পিরিয়ড-ডাউন-পিরিয়ড অবলম্বন না করে) অর্জন করা যায়?

উত্তর:


107

:10,20s/^/,/

অথবা ম্যাক্রো ব্যবহার করুন, এর সাথে রেকর্ড করুন:

q a i , ESC j h q

সাথে ব্যবহার করো:

@ a

ব্যাখ্যা: q aনিবন্ধন করার জন্য একটি ম্যাক্রো রেকর্ডিং শুরু a, qরেকর্ডিং শেষ। এই aজন্য zউপলব্ধ রেজিস্টার আছে ।


ধন্যবাদ। আমি যদি একটি শিফট-আই এর সমতুল্য চাই? তা হল, প্রাথমিক সাদা জায়গা ছেড়ে যাওয়া?
saffsd

2
ব্যাখ্যা: ^\(\s*\)প্রাথমিক শ্বেতস্পেস ক্যাপচার করে এবং এটি একটি রেজিস্টারে সংরক্ষণ করে, যা আপনি এটির পরে পড়তে পারেন \1
সোভান্তে

136

Ctrl- vভিজ্যুয়াল মোডে ব্লকওয়াইসে প্রবেশ করে। তারপরে আপনি সরানো যেতে পারেন ( hjkl-সাধারণভাবে স্বাভাবিক হিসাবে), এবং যদি আপনি একাধিক লাইনে কিছু সন্নিবেশ করতে চান তবে Shift- ব্যবহার করুন i

পাঠ্যের জন্য:

abc123abc
def456def
ghi789ghi

যদি আপনি আঘাত করেন Ctrl- v1 এর উপরে আপনার কার্সার দিয়ে, jদুটি কলাম নীচে যেতে দু'বার আঘাত করুন , তবে Shift- i,ESC, আপনার পাঠ্যটি দেখতে এমন হবে:

abc,123abc
def,456def
ghi,789ghi

(মাল্টি-লাইন সন্নিবেশটি কিছুটা পিছিয়ে গেছে এবং আঘাতের পরে আপনি রেন্ডার করবেন না ESC)।


3
খুশী হলাম। Ctrl-V এর অর্থ বড়হাঁটি, যাইহোক, আপনি Ctrl-Shift-v বলতে পারেন
Svante

8
আসলে এটি সিটিআরএল-ভি বা সিটিআরএল-ভি হয়- ভিমটি সিটিআরএল-কোডগুলির জন্য কেস-সংবেদনশীল (দেখুন: CTRL- help চর help সহায়তা করুন)।
রায়পুন

2
এই পদ্ধতিটি কেন কাজ করছে না তার কিছুটা অনুসন্ধান করার পরে কারণ এটি আমার পরিবর্তে মূলধন আই (শিফট-আই) ব্যবহার করে (এছাড়াও এটি কেবল সিটিআরএল-ভি ছিল, যেহেতু সিআরটিএল-শিফট-ভি আমাকে শেষ দিকে নিয়ে গিয়েছিল)
উইলিফ্রোগ

4
আমি কৌতুহলী. তারা কেবল iশিফট কী ছাড়া ব্যবহার করবেন না কেন ?
অফ 99555

1
আমি শিফট ছাড়াই বর্তমান অবস্থানে inোকানো হয়। শিফট + আমি লাইনের শুরুতে সন্নিবেশ করানো হয়েছে
কেভিন পি


44

আপনি যদি ইতিমধ্যে '' ব্যবহার করেন। আপনার শেষ কমান্ড অনেক পুনরাবৃত্তি, তারপর আমি দেখেছি এই সবচেয়ে সুবিধাজনক সমাধান এতদূর যাবে। এটি আপনাকে ব্যবহার করে ভিজ্যুয়াল ব্লকের প্রতিটি লাইনে আপনার শেষ কমান্ডটি পুনরাবৃত্তি করতে দেয়

" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>

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

23

আমি বিশ্বাস করি এটি করার সবচেয়ে সহজ উপায়

1) এক লাইনের জন্য একটি ম্যাক্রো রেকর্ড করুন, এটিকে 'এ' বলুন; এক্ষেত্রে এক প্রকার

qa I, ESC jq

2) আপনি ম্যাক্রো প্রয়োগ করতে চান এমন লাইনগুলির ব্লকটি নির্বাচন করুন

3) লাইনগুলির এই ব্লকের উপর ম্যাক্রো 'এ' চালানোর জন্য 'আদর্শ' ফাংশনটি ব্যবহার করুন, যেমন,

:'<,'>norm@a

17

আমি মনে করি ম্যাক্রো রেকর্ড করা সবচেয়ে সহজ এবং তারপরে ম্যাক্রোর যতবার আপনি চান তার পুনরাবৃত্তি করুন। উদাহরণস্বরূপ, প্রতিটি লাইনের শুরুতে কমা যুক্ত করতে, আপনি টাইপ করুন:

q a I , ESC j q

5 বার পুনরাবৃত্তি করতে, আপনি প্রবেশ করুন

5 @ a


2

আপনার সম্পাদনা ইতিমধ্যে .অপারেটরে সংরক্ষণ করা হয়েছে , নিম্নলিখিতগুলি করুন:

  1. ভিজ্যুয়াল মোড ব্যবহার করতে আপনি অপারেটরটিকে প্রয়োগ করতে চান এমন পাঠ্য নির্বাচন করুন
  2. তারপরে কমান্ডটি চালান :norm .

1

ম্যাক্রোগুলি ছাড়া, ইতিমধ্যে উত্তর হিসাবে, বিভিন্ন লাইনে কমা ofোকানোর নির্দিষ্ট ক্ষেত্রে (10 থেকে 20 লাইনটি বলুন) আপনি এর মতো কিছু করতে পারেন:

:10,20s/\(.*\)/,\1

অর্থাৎ, আপনি \ (এবং \) এর সাথে একটি সংখ্যাযুক্ত গ্রুপ ম্যাচ তৈরি করতে পারেন এবং "ম্যাচের বিষয়বস্তুগুলির সাথে প্রতিস্থাপন করুন" বলতে প্রতিস্থাপনের স্ট্রিংয়ে \ 1 ব্যবহার করতে পারেন।

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