আমি কীভাবে উইম দিয়ে পেস্ট (ওভাররাইট) করতে পারি?


31

ইন vimআমি ব্যবহার yyএবং pYank সব সময় এবং লাইন পেস্ট করুন। তবে, আমি যদি ফাইলে এক লাইন একাধিক স্থান প্রতিস্থাপন করতে চাই, তবে আমি ব্যবহার করতে পারি না yy p dd pকারণ dd ক্লিপবোর্ড / রেজিস্ট্রারে লাইনটি মোছা হয়। যদিও আমার সম্ভবত নিবন্ধগুলি কীভাবে আরও ভাল ব্যবহার করা উচিত তা আমার জানা উচিত, আমি মনে করি pবর্তমান রেখাকে প্রতিস্থাপনের কোনও উপায় সম্ভবত রয়েছে is

উত্তর:


27

ডিফল্টরূপে, পেস্ট কমান্ডগুলি "("নামবিহীন") নিবন্ধ ব্যবহার করে । কার্যকরভাবে, যে কোনও কমান্ড যা একটি নিবন্ধে লিখিত হয় তাও নামহীন নিবন্ধে লিখিত থাকে, সুতরাং ইয়ঙ্কস, মুছুন, এবং সমস্ত পরিবর্তন এটি প্রভাবিত করে। এ কারণেই আপনার ইয়াঙ্ক-মোছা-পেস্ট ক্রমটি ইয়ঙ্কযুক্ত পাঠ্যের পরিবর্তে মোছা পাঠ্যটি আটকে দেয়।

0রেজিস্টার এখানে সাহায্য করতে পারেন। যে কোনও ইয়াঙ্ক কমান্ড যা কোনও রেজিস্টার নির্দিষ্ট করে না তা ইয়াঙ্কড পাঠ্যকে রেজিস্টারে রাখে 0(পাশাপাশি ")। এটি মুছে ফেলা বা অপারেশনগুলি দ্বারা প্রভাবিত হয় না, তাই আপনি মধ্যবর্তী মুছে ফেলা বা পরিবর্তনগুলি করলেও আপনি একাধিকবার ইয়েঙ্কড লাইন আটকে দিতে এটি ব্যবহার করতে পারেন।

  1. yy: রেজিস্টার 0এবং "উভয়ের এখন ইয়াঙ্কড লাইন রয়েছে।
  2. প্রতিস্থাপন করতে একটি লাইনে সরান।
  3. dd: রেজিস্টার "এখন মুছে ফেলা লাইন আছে, কিন্তু 0এখনও রেজিস্টার ইয়্যাঙ্কড লাইন আছে।
    "0P: রেজিস্টার থেকে মূল ইয়াঙ্কড লাইন আটকান 0
  4. প্রতিস্থাপন করতে পরবর্তী লাইনে যান Move
  5. dd"0P (উপরের মতই)

(কোনও বাফারের শেষ লাইনটি প্রতিস্থাপন করার সময় কার্সার অবস্থানের কাজ করার কারণে আপনি তার "0pপরিবর্তে ব্যবহার করতে চাইবেন "0P))

এটি ব্রুস এডিগার এর উত্তরের খুব কাছাকাছি , প্রাথমিকভাবে ইয়ঙ্ক করার সময় আপনাকে কোনও রেজিস্টার নির্দিষ্ট করতে হবে না except এক বা একাধিক নামযুক্ত রেজিস্টারগুলি ব্যবহার করা খুব সহজ হতে পারে যদিও আপনার কিছু লাইন (উদাহরণস্বরূপ) এর সাথে প্রতিস্থাপন করতে হবে AAA, তবে অন্যান্য রেখাগুলি BBB( AAAরেজিস্টারে রাখা a, এবং BBBনিবন্ধে b(অথবা এর মধ্যে একটি রেজিস্টারে রেখে দিন 0) প্রয়োজন হলে সেগুলি যথাযথভাবে পেস্ট করুন )।

এছাড়াও আপনি থেকে আটকাতে পারেন 0লাইন-জ্ঞানী চাক্ষুষ মোড (মধ্যে V) একটি কীস্ট্রোক সংরক্ষণ করতে: V"0p

আপনি যদি টাইপ করতে পছন্দ না করেন তবে আপনি "0ম্যাপিংটি আরও সুবিধাজনক হিসাবে খুঁজে পেতে পারেন:

noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p

একটি বিকল্প পদ্ধতি হ'ল _("ব্ল্যাকহোল") নিবন্ধকে মুছুন । আপনি এটি মুছে ফেললে, "নিবন্ধকটি প্রভাবিত হয় না, সুতরাং আপনার ইয়াঙ্ক-মোছা-পেস্ট সিকোয়েন্সটি এখনও নামবিহীন রেজিস্টার থেকে ইয়ঙ্কযুক্ত পাঠ্য আটকে দিতে পারে।

  1. yy: নিবন্ধন করুন 0এবং "উভয়ের এখন ইয়ঙ্কযুক্ত লাইন রয়েছে।
  2. "_dd: রেজিস্টারে কোনও পরিবর্তন নেই।
    P: রেজিস্টার থেকে মূল ইয়ঙ্কযুক্ত পাঠ্য আটকে দিন "

আবার, আপনি ম্যাপিং আরও সুবিধাজনক খুঁজে পেতে পারেন:

noremap <Leader>d "_d

2
অথবা, tl; dr, স্রেফ ব্যবহার করুন yy(প্রতিস্থাপনের জন্য লাইনে চলে যান) S<C-r>0<Esc>.কমান্ডটি দিয়ে পুনরাবৃত্তিযোগ্য হওয়ার সুবিধা রয়েছে ।
ওয়াইল্ডকার্ড

11

দেখে মনে হচ্ছে কেভিনের বেশ ভাল উত্তর রয়েছে, তবে আপনি মুছে ফেলা প্রতিটি লাইনে যদি চোখ রাখতে চান তবে প্রতিস্থাপন করুন, কিছুটা আলাদা সমাধান বিদ্যমান।

1. Find line to copy in some select number of places.
2. Put cursor on it.
3. "ayy copies that line into register 'a'.
4. Find line to replace. Put cursor on it.
5. dd deletes that line. "aP inserts the copied line above where the cursor now lies.
6. Repeat steps 4 and 5.

এই ধরণের রেসিপি আপনাকে মুছে ফেলতে এবং প্রতিস্থাপনের জন্য লাইনগুলি খুঁজে পেতে প্যাটার্ন ম্যাচিংয়ের ব্যবহার করতে দেয় এবং আপনি ফাইলের (1 জি) শুরুতে ফিরে যেতে পারেন এবং যতবার খুশি তেমন এগিয়ে যেতে পারেন। আমার কাছে যদি বার বার সংগ্রহ করতে এবং স্থাপনের জন্য আমার কাছে 2 বা ততোধিক লাইন থাকে তবে আমি "ayyপ্রথম লাইনের জন্য ব্যবহার করি , "byyদ্বিতীয়টির "cyyজন্য, তৃতীয়টির জন্য এবং আরও অনেক কিছু। আমার উপর মানসিক বোঝা হ্রাস করার জন্য আমি একটি অভ্যাস তৈরি করেছি (যা রেসিপিটির সাধারণতা হ্রাস করে)।


খুব সুন্দর. তাই আপনি যদি আমি ব্যবহার "ayyএবং তারপর dd, ddপ্রতিস্থাপিত করবে না কি হয় a, কিন্তু যদি আমি টাইপ pএটি আটকে দিন কি শুধু ব্যবহার মোছা হয়েছে dd। এবং যদি আমি "ayyযা মুছে দিচ্ছি তার সাথে আমি যদি প্রতিস্থাপন করতে চাই , তবে আমি ব্যবহার করব "add- এটি কি ঠিক?
cwd

"আইজি রেজিস্টার 'এ' তে একটি লাইন অনুলিপি করে।" ডিডি "একটি 'ল' কে ডিফল্ট রেজিস্টারে কাটায়, 'ক' নয়। 'পি' ডিফল্ট রেজিস্টারটি আটকে দেয়, সঠিক। এবং হ্যাঁ," রেজিস্টার 'এ' কেটে একটি লাইন যোগ করুন যা "এআই কমান্ড" থেকে সামগ্রীগুলি প্রতিস্থাপন করবে
ব্রুস

5

:sআপনি কতটা টাইপ করতে চান তার উপর নির্ভর করে এটি করার কয়েকটি উপায় রয়েছে । সবচেয়ে সহজ উপায় হ'ল একটি সহজ অনুসন্ধান এবং প্রতিস্থাপন:

:%s/find this line/replace with this/

%পুরো ফাইল অনুসন্ধান ও সব ঘটনার প্রতিস্থাপন করবে।

যদি এটি আপনার জন্য অত্যধিক টাইপিং, আপনি গন্তব্য স্ট্রিং (হ্যাঁচকা টান করতে পারেন yy) এবং ব্যবহার "(ডিফল্ট) নিবন্ধন সঙ্গে এটি ঢোকাতে Ctrl+r ":

:%s/<ctrl+r><">/replacement/

অথবা, যদি আপনি প্রতিস্থাপন স্ট্রিং এর একটি কপি আছে, তবে আপনি আলাদা রেজিস্টার দুই সঙ্গে হ্যাঁচকা টান করতে পারেন "ayyএবং "byyYank থেকে মধ্যে aএবং bরেজিস্টার যথাক্রমে (আপনার রেজিস্টার কোন চিঠি ব্যবহার করতে পারেন)। তারপর ব্যবহার Ctrl+r aএবং Ctrl+r bতাদের সার্চ পেস্ট এবং ক্ষেত্র প্রতিস্থাপন।

ওয়ান-আপ ব্রুসকে নয়, আপনি যদি প্রতিস্থাপনের আগে লাইনগুলি পরীক্ষা করতে চান তবে কেবল cবিকল্পটি যুক্ত করুন:

:%s/find this line/replace with this/c

2

আপনি Vভিজুয়াল মোডে প্রতিস্থাপন করতে চান সেই লাইনটি হাইলাইট করতে ব্যবহার করতে পারেন এবং তারপরে ppসেই লাইনটি আটকানোর জন্য আঘাত করতে পারেন।

এটি কেবল একটি কীস্ট্রোক যুক্ত করেছে, সুতরাং এটি বেশ ভাল সমাধান হিসাবে মনে হচ্ছে।


এটি কাজ করে না: পেস্টের পরে, ক্লিপবোর্ডে পাঠ্যটি রয়েছে যাV
ড্যানিয়েল কুলম্যান ডেস্ক

শুধু একক p
অ্যারন থোমা

2

আমি cনিয়মিত অনুসন্ধানের সাথে মিলিত এই ধরণের জিনিসটির জন্য "পরিবর্তন", কমান্ডটি প্রায়শই ব্যবহার করি। আপনি আগ্রহী প্রতিটি লাইন / পাঠ্যের টুকরোটির জন্য ফাইলটি অনুসন্ধান করতে পারেন এবং তারপরে পরপর n.কমান্ডগুলি ব্যবহার করতে পারেন ( nপরবর্তী এবং তারপরে .শেষ পরিবর্তনটি পুনরাবৃত্তি করতে))

/^hello- হ্যালো দিয়ে শুরু লাইনের সন্ধান করুন;
c$goodbye- বিদায় লাইন পরিবর্তন;
n.- পুনরাবৃত্তি সন্ধান, পুনরাবৃত্তি পরিবর্তন

আপনি যদি ফাইলটিতে ইতিমধ্যে একটিতে লাইনটি পরিবর্তন করতে চান তবে আপনি কেবল এটি আপনার ইনপুট বাফারে অনুলিপি করতে পারবেন (আপনার জিইউআই এটির অনুমতি দিচ্ছে) এবং তারপরে প্রথম পরিবর্তন কমান্ডের সামগ্রীটি পেতে পেস্ট করুন।

সব কিছু vi এর মতো, আপনি কী ধরণের সম্পাদনা করতে চান তার উপর নির্ভর করে আপনার পকেটে প্রচুর বিকল্প থাকা ভাল idea

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