ভিআইএম শব্দটি পেস্ট বাফারের সামগ্রীর সাথে প্রতিস্থাপন করুন?


110

আমাকে একটি ফাইলে শব্দের প্রতিস্থাপনের একটি গুচ্ছটি করতে হবে এবং এটি একটি ভিআই কমান্ড দিয়ে করতে চাই, কোনও এক্স কমান্ডের মতো নয় :%s///g। আমি জানি যে এটি বর্তমান উপায় হিসাবে কার্সার বর্তমান অবস্থানে শব্দের প্রতিস্থাপন করে: cw<text><esc>তবে নামবিহীন নিবন্ধের বিষয়বস্তু প্রতিস্থাপনের পাঠ্য হিসাবে এবং নিবন্ধকে ওভাররাইট না করে কি এটি করার কোনও উপায় আছে?


8
রেজোলিউশন: আমার তাত্ক্ষণিক প্রয়োজনের জন্য, আমি 12yl12 টি অক্ষর ইয়েঙ্ক করতাম এবং "_cw^r0একটি শব্দ প্রতিস্থাপন করতাম । আমি তখন .ফাইলটি জুড়ে প্রতিস্থাপনটির পুনরাবৃত্তি করতে কমান্ডটি ব্যবহার করতে সক্ষম হয়েছি ।
Plong

উত্তর:


127

আমি "পেস্ট" দিয়ে ভাবছি আপনি নামবিহীন (ইয়াঙ্ক / পুট / চেঞ্জ / ডিলিট / বিকল্প) নিবন্ধক বোঝাচ্ছেন, তাই না? (যেহেতু এটিই হ'ল চেঞ্জ কমান্ড দ্বারা ওভাররাইট করা হবে))

খাতাপত্র সাধারণত টাইপ করে উল্লিখিত "তারপর রেজিস্টার নাম (একক চরিত্র), মত "ayতারপর "apরেজিস্টার মধ্যে Yank থেকে a, তারপর রেজিস্টার বিষয়বস্তু করা a। একই পরিবর্তন কমান্ডের জন্য যায়। এই ক্ষেত্রে, যদি আপনি পাঠ্য আপনি পরিবর্তন আদেশের সঙ্গে অপসারণ যে কোন জায়গায় যেতে না চান, আপনি কালো গহ্বর রেজিস্টার ব্যবহার করতে পারেন "_: "_cw। তারপরে একবার সন্নিবেশ মোডে আপনি সিটিটিএল-আর টিপুন এবং তারপরে যে রেজিস্টারটি আপনি চান (সম্ভবত ") সেই রেজিস্টারের বিষয়বস্তু লিখতে পারেন।

  • "* - নির্বাচন রেজিস্টার (মাঝের বোতামের পেস্ট)
  • "+ - ক্লিপবোর্ডের নিবন্ধ (সম্ভবত টার্মিনালের মাধ্যমে সিটিআরএল - শিফট-ভি দিয়েও অ্যাক্সেসযোগ্য)
  • "" - ভিমের ডিফল্ট (নামবিহীন) ইয়াঙ্ক / পুট / চেঞ্জ / ডিলিট / বিকল্প রেজিস্টার।

সংক্ষিপ্ত উত্তর: "_cw^R"

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

ভিম এই রেজিস্টারগুলিকে ইয়ঙ্কের পাঠ্য দিয়ে পূরণ করে এবং আদেশগুলি মুছে দেয়।

সংখ্যাযুক্ত রেজিস্টার 0-এ সাম্প্রতিক ইয়াঙ্ক কমান্ডের পাঠ্য রয়েছে, যদি না কমান্ড ["x] দিয়ে অন্য একটি রেজিস্টার নির্দিষ্ট করে।

সংখ্যাযুক্ত রেজিস্ট্রার 1-এ সর্বাধিক সাম্প্রতিক মুছুন বা পরিবর্তন কমান্ড দ্বারা মুছে ফেলা পাঠ্য রয়েছে, যদি না কমান্ডটি অন্য একটি রেজিস্টার নির্দিষ্ট করে দেয় বা পাঠ্যটি এক লাইনের চেয়ে কম হয় (ছোট মুছুন নিবন্ধকটি তখন ব্যবহৃত হয়)। ব্যতিক্রম এই আন্দোলন কমান্ড দিয়ে ডিলিট অপারেটর জন্য তৈরি করা হয়: %, (, ), `, /, ?, n, N, {এবং }। "1 সর্বদা তত্ক্ষণাত ব্যবহৃত হয় (এটি vi উপযুক্ত)।" - মুছে ফেলুন একটি লাইনের মধ্যে থাকলেও "- নিবন্ধটি ব্যবহার করা হয়।

প্রতিটি ক্রমান্বয়ে মুছে ফেলা বা পরিবর্তনের সাথে, ভিম রেজিস্ট্রার 1 এর পূর্ববর্তী বিষয়বস্তুগুলিকে 2, 2 তে 3 এবং অন্যদিকে রেজিস্টার 9 এর পূর্ববর্তী বিষয়বস্তুগুলি হারিয়ে ফেলেছে।


1
ঠিক আছে, ভাবেন আমি এখনও আমার উত্তরে রেজিস্টারগুলিতে পর্যাপ্ত নথিগুলি নকল করেছি? এটি সব সেখানে আছে :help registers
ক্যাসাবেল

48

এই পোস্টে তথ্য ব্যবহার করে, আমি এই দরকারী ম্যাপিং গঠন করেছি। আমি 'সিপি' বেছে নিয়েছি কারণ এটি "পেস্ট পরিবর্তন করুন"

nmap <silent> cp "_cw<C-R>"<Esc>

সম্পাদনা করুন:

এছাড়াও আমি এটি আরও একধাপ এগিয়ে নিয়েছি এবং যে কোনও গতি সমর্থন করেছি।

উপরের কমান্ডের সমতুল্য পেতে এটি cpw"পেস্ট শব্দ পরিবর্তন করুন" এর জন্য হবে

"This allows for change paste motion cp{motion}
nmap <silent> cp :set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
    silent exe "normal! `[v`]\"_c"
    silent exe "normal! p"
endfunction

<সাইলেন্ট> এটি আমার পক্ষে কাজ না করার কারণ ... কোনও ধারণা কেন এমন হবে? আমি ম্যাপিং এবং ফাংশনগুলিতে একটি n00b।
হলিস্টার

এটির সাথে একমাত্র সমস্যাটি হ'ল আপনি এটির সাথে পেস্ট করার জন্য কোনও রেজিস্টার চয়ন করতে পারবেন না ... তবে সেই ক্ষেত্রে আমি মনে করি আপনি কেবল সিটিআরএল করতে পারেন এবং সিটিআরএল + আর ব্যবহার করতে পারেন
স্টিভ ভার্মিউলেন

2
নিবন্ধের নামকরণের যোগ করার আরও ভাল উপায় হতে পারে তবে নিম্নলিখিতগুলি আমার জন্য কাজ করে: nmap <silent> cp :let g:currentRegister=v:register<cr>:set opfunc=ChangePaste<CR>g@ function! ChangePaste(type, ...) silent exe "normal! `[v`]\"_c".getreg(g:currentRegister) endfunction
স্টিভ ভার্মিউলেন

@EventualEntropy লাইনগুলি প্রতিস্থাপনের জন্য এটি ভালভাবে কাজ করে, আমি কীভাবে লাইনের পরিবর্তে শব্দের জন্য এই কাজটি করতে পারি, আমি এখনও vim শিখছি। সাহায্যের জন্য ধন্যবাদ.
জাভিটোজ চীমা

@ লাভিতোজচিমা আমার এমনকি সেই মন্তব্যটি করার কথা মনে নেই, হাহা। তবে দেখা যাচ্ছে যে, আমি আসলে এই কার্যকারিতাটি সরবরাহ করার জন্য একটি প্লাগইন লিখেছি ( github.com/svermeulen/vim-easyclip )
স্টিভ ভার্মিউলেন

27

আপনি এর জন্য ভিম ভিজ্যুয়াল মোড ব্যবহার করতে পারেন। উদাহরণস্বরূপ একটি শব্দ অনুলিপি করুন: yeএবং তারপরে অনুলিপি করা শব্দের সাথে অন্যটি মুছে ফেলুন:vep


9
এটি কাজ করে, তবে এটিও লক্ষ করা উচিত যে ভিজ্যুয়াল পেস্ট সদ্য মুছে ফেলা পাঠ্যের জন্য ইয়াঙ্ক বাফারটিকে ওভাররাইট করে।
ostler.c

24

যদি আপনার কর্সার শব্দের উপরে থাকে তবে আপনি নামবিহীন নিবন্ধের বিষয়বস্তু দিয়ে প্রতিস্থাপন করতে চান, আপনি ব্যবহার করতে পারেন viwpvভিজ্যুয়াল মোডে স্যুইচ iwকরে, ভিতরের শব্দটি নির্বাচন করে এবং pনিবন্ধের সামগ্রীগুলি তার জায়গায় রাখে place

অনুশীলনে, যখন আমি একটি শব্দের (ফাংশন নাম, ইত্যাদি) yiwঅপরটির সাথে প্রতিস্থাপন করতে চাই, আমি প্রতিস্থাপন হিসাবে ব্যবহার করতে একটিতে চলে যাব, অনির্বাচিত শব্দটি নামবিহীন রেজিস্টারে ইঙ্ক করতে, তারপরে আমি 'শব্দের দিকে সরব' মি প্রতিস্থাপন, এবং viwpএটি প্রতিস্থাপন। অন্য শব্দের জন্য একটি শব্দ প্রতিস্থাপনের সুন্দর দ্রুত উপায়। আপনি /যে শব্দটি এটির বদলে প্রতিস্থাপন করছেন সেটির জন্য যদি আপনি অনুসন্ধান করেন (তবে ) আপনি তারপরে nপ্রতিস্থাপনের প্রয়োজন পরের ঘটনাটিতে পৌঁছানোর জন্য কেবল আঘাত করতে পারেন। স্পষ্টতই ব্যবহারের বিকল্প নেই :%s/find/replace/g, তবে কয়েকটি দ্রুত বিকল্পের জন্য এটি কার্যকর হতে পারে, বিশেষত যদি আপনার রেজিস্টারটিতে নতুন শব্দটি ইতিমধ্যে রয়েছে।


4
আমি আশ্চর্য হয়েছি এটি গৃহীত সমাধান নয়: উপরের সমস্তগুলি, যদিও কিছু প্রান্তের ক্ষেত্রে আরও নমনীয় , কেবল 'বর্তমানের নামবিহীন নিবন্ধককে কোথাও নির্বাচনের জন্য অদলবদল করার জন্য' অনেক বেশি ভার্জোজ, যা পরিস্থিতিটি আসল প্রশ্নকর্তা এখানে এসেছিলেন।
এলিওটিটিসিবল

1
এটি খুব দরকারী এবং স্বজ্ঞাত।
ল্যাকোস্টেনাইকোডার

6

আপনি যদি নিজের পেস্টের রেজিস্টারটি পূরণের জন্য কোনও নাম রেজিস্টার (যেমন ব্যবহার "ayবা "adইত্যাদি) ব্যবহার করেন তবে আপনি এর মতো কিছু করতে পারেন

cw<CTRL-R>a<esc>

যা শব্দের সাথে নিবন্ধের বিষয়বস্তু স্থাপন করবে a। আমি যতদূর বলতে পারি, আপনি ডিফল্ট রেজিস্টারটি ব্যবহার করতে পারবেন না কারণ যখন আপনি cwএটি সেই আদেশটি দিয়েছিলেন যা সেই আদেশ দ্বারা কাটা হয়েছে।


আপনি ডিফল্ট রেজিস্টার ব্যবহার করতে পারেন! আমার উত্তর দেখুন।
ক্যাসাবেল

2

আপনি কি সিস্টেমের পেস্ট বাফার বা vi রেজিস্টার বলতে চান?

আপনি যদি সিস্টেমের পেস্ট বাফারটি ব্যবহার করতে চান তবে আপনি ভাল আছেন এবং করতে পারেন dw"+P- "একটি রেজিস্টার চয়ন করুন এবং "+এটি সিস্টেমের পেস্ট বাফার।

অন্যথায় নন-ডিফল্ট রেজিস্ট্রারে "ayঅনুলিপি করুন অনুলিপি করতে aএবং তারপরে কিছু করার পরিবর্তেdw"aP


ধন্যবাদ, হামিশ আমি এটি চেষ্টা করেছিলাম, তবে dw"শব্দের" বিবেচনা করার পরে আমি cwকেবল শব্দের পরিবর্তন করে যাচ্ছি তারপরে শুকনো স্থানকে অনুসরণ করে। যে কারণে, dwআমার জন্য কাজ করবে না।
Plong

যে ক্ষেত্রে deআপনার জন্য কাজ হবে না - এটি, এই শব্দের শেষে মুছে ফেলবে যখন dwপরবর্তী শব্দের শুরুতে নিয়ে মুছে ফেলবে।
হামিশ ডাউনার

1

আপনি ywশব্দটি ইয়াঙ্ক করার জন্য ব্যবহার করতে পারেন , তারপরে আপনি ইয়াঙ্কড শব্দের সাথে শব্দটি vipwইয়াঙ্ক শব্দে পরিবর্তন করতে পারেন এবং পূর্বে ইয়েঙ্কড শব্দটি পেস্ট করতে পারেন ।


0

আপনি এটির জন্য নিবন্ধগুলি ব্যবহার করতে পারেন:

রেজিস্টার প্রথম স্থান প্রতিস্থাপন পাঠ্য <mark some text>"ay

aনিবন্ধের নাম কোথায়

তারপরে আপনি এই রেজিস্টারটি প্রতিস্থাপনে ব্যবহার করতে পারেন

ve"ap


দুর্ভাগ্যক্রমে, আমি কেবল শেষের মাধ্যমে পেস্ট অপারেশনটি পুনরায় করতে পারি না ., যা আমি করতে চেয়েছিলাম thing ধন্যবাদ যদিও. অনেক প্রশংসিত.
Plong

0

অথবা আপনি Shift+ v- করতে পারেন p(পুরো লাইনটি নির্বাচন করুন এবং তার জায়গায় আটকে দিন)


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