ভিম - আমি বর্তমান পেস্ট বাফার ব্যবহার করে কীভাবে একটি 'শব্দ পরিবর্তন' করতে পারি


86

আমার পেস্ট বাফারে কিছু পাঠ্য রয়েছে, যেমন আমি একটি yw(ইয়াঙ্ক শব্দ) করেছি এবং এখন আমার বাফারে আমার 'ফু' রয়েছে।

আমি এখন 'বার' শব্দটিতে যাই এবং আমি এটি আমার পেস্ট বাফার দিয়ে প্রতিস্থাপন করতে চাই।

পাঠ্যটি ম্যানুয়ালি প্রতিস্থাপন করতে আমি করতে পারি cwএবং তারপরে নতুন শব্দটি টাইপ করতে পারি ।

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

আমার কাছে এখনই সর্বোত্তম বিকল্পটি হ'ল আমি প্রতিস্থাপন করতে চাই এবং dwশব্দের মুছে ফেলতে চাই (শব্দের মুছুন), তারপরে অন্য জায়গায় গিয়ে yw(ইয়ঙ্ক শব্দ) করুন, তারপরে প্রতিস্থাপনের জায়গায় ফিরে যান এবং করুন p(পেস্ট) যা দারুণ আনাড়ি বিশেষত যদি তারা একই স্ক্রিনে না থাকে।

উত্তর:


120

বিকল্প 1

আপনি এটি করতে নিবন্ধগুলি ব্যবহার করতে পারেন এবং প্রক্রিয়াটির জন্য একটি কী-বাইন্ডিং তৈরি করতে পারেন।

আপনি যে শব্দটি দিয়ে প্রতিস্থাপন করতে চান তা ইয়াঙ্ক করুন yw

ইয়াঙ্কেড শব্দটি নিবন্ধটিতে রয়েছে 0যা জারি করে আপনি দেখতে পাবেন :registers

আপনি যে শব্দটি প্রতিস্থাপন করতে এবং করতে চান তাতে যান cw। না Ctrl+ + rদ্বারা অনুসরণ 0পেস্ট করতে 0রেজিস্টার।

যে জন্য মানচিত্র মত এই (অভিমানী কিছু দেখাবে Ctrl+ + jআমাদের কী কম্বো হিসাবে):

:map <C-j> cw<C-r>0<ESC>

বিকল্প 2 (আরও সহজ)

আপনার শব্দটি ইয়াঙ্কডের সাহায্যে, আপনি যে শব্দটি প্রতিস্থাপন করতে এবং করতে চান তার উপরে কার্সার viwp। যা ভিজ্যুয়ালটি ইন্ডিয়ার ওয়ার্ড সিলেক্ট করে পেস্ট করুন।

মন্তব্যে @ তলো এর সৌজন্যে: আপনি ঠিক করতে পারেন vep। একটি চর খাটো। ডাউনসাইড শব্দের শুরুতে কার্সার অবস্থান করতে হবে এবং (খনি হিসাবে) বাফার পরিবর্তন করে।

মন্তব্য (মাইকেল থেকে):

এটা ভাল. অতিরিক্ত দ্রষ্টব্য: দ্বিতীয় পদ্ধতিটি সত্যই সহজ তবে এটি কেবল এক প্রতিস্থাপনের জন্য কাজ করে কারণ প্রতিটি প্রতিস্থাপনের পরে বাফার তারপরে প্রতিস্থাপন করা ক্ষেত্রে (পুরানো পাঠ্য) পরিবর্তিত হয়। প্রথম পদ্ধতিটি ব্যবহার করা কিছুটা কঠিন তবে বাফার 0 টি যেমন রয়েছে তেমন সুবিধা রয়েছে যাতে আপনি একই পদ্ধতিটির 1 টিরও বেশি প্রতিস্থাপন করতে সেই পদ্ধতিটি ব্যবহার করতে পারেন।


14
বিকল্প 3 (এমনকি আরও সহজ): আপনার শব্দটি ইয়াঙ্কডের সাহায্যে, আপনি যে শব্দটি প্রতিস্থাপন করতে এবং করতে চান তার প্রথম অক্ষরটির উপরে কার্সার vep
tl

আমি বিকল্পটি 3 পছন্দ করি যখন পরিবর্তনের জন্য কেবল 1 শব্দ থাকে। যদি একাধিক একই শব্দের পরিবর্তিত হয় তবে বিকল্প 1 আমাকে এটি ব্যবহার করতে দেয়। অপারেটর এটি পুনরাবৃত্তি করতে ..
typelogic

3
ve"0pআপনাকে আপনার পরিবর্তনের পুনরাবৃত্তি করতে কাজ করবে
জিলিয়ান

আপনি যদি map <C-j> ciw<C-r>0<ESC>এটির কোনও মানচিত্র তৈরি করতে চলেছেন তবে সম্ভবত এটি ব্যবহার করা ভাল so যাতে আপনি যে শব্দটি চাপছেন তা কোথা থেকে আসে না ^j
পল পার্কার

সিটিআরএল-আর কেন এটি যাদু করে তা জানতে চাইছেন: :help insertতবে সিটিআরএল-আর অনুসন্ধান করুন /CTRL-R। কীভাবে ve"0pকাজ করে তার জন্য দেখুন:help registers
পল পার্কার

12

ywআপনার শব্দটি ইয়াঙ্ক করতে, তারপরে কার্সারটি আপনি যে শব্দটি প্রতিস্থাপন করতে চান "_dwতাতে সরিয়ে ফেলুন এবং মুছে ফেলতে ব্যবহার করুন , পাঠ্যটি নাল রেজিস্টারে প্রেরণ করুন (সুতরাং এটি "নিবন্ধের বিষয়বস্তুগুলিকে ওভাররাইট করে না , যেখানে ইয়্যাঙ্কড / কাট পাঠ্যটি ডিফল্টরূপে যায় ), এবং তারপরে সহজভাবে পেস্ট করুন p

জিনিসগুলি কিছুটা সহজ করার জন্য আপনি নিম্নলিখিত ম্যাপিংটি ব্যবহার করতে পারেন:

nnoremap <leader>d "_d

... তাই সাধারণ মোডে, আপনি রেজিস্টারকে \dwপ্রভাবিত না করে কোনও শব্দ মুছতে ব্যবহার করতে পারেন "


3

ভিআইএম উপায়ে এটি করার জন্য, আপনি ইচ্ছাকৃতভাবে ইয়ঙ্ক, মুছুন এবং অন্যান্য রেজিস্টারগুলি ব্যবহার করুন।

রেজিস্টার "0হ'ল ইয়ঙ্ক রেজিস্টার। আপনি যা কিছু যাবেন তা এখানে রাখা হবে, তবে মুছে ফেলা কখনও নিবন্ধকে স্পর্শ করবেন না "0

সুতরাং, আপনার উদাহরণে, আপনি কেবল একটি শব্দ ইয়াঙ্কড করেছিলেন। আপনি কেবল য্যাঙ্ক করেছেন তার সাথে কোনও শব্দ প্রতিস্থাপন করতে, আপনি মুছে ফেলার সুবিধা গ্রহণ করবেন না কখনও ইয়াঙ্ক নিবন্ধকে স্পর্শ করবেন না। সুতরাং লক্ষ্য শব্দের দিকে সরান, এটি দিয়ে মুছুন dw, তারপরে আপনার ইয়াঙ্ক-রেজিস্টার থেকে পেস্ট করুন "0pবা আরও ভাল, cwতারপরে ^R0(যা পুনরাবৃত্তিযোগ্য)।

ইয়াঙ্ক রেজিস্টারের একদম বিপরীতে হ'ল ছোট ডিলেটেশন রেজিস্টার "-। যে কোনও ছোট মুছা বা পরিবর্তন অপসারণ এখানে রাখা হয় তবে ইয়্যাঙ্কস কখনই স্পর্শ করে না "-। মুছে ফেলা যদি সম্পূর্ণ লাইনের চেয়ে কম হয় তবে এটি ছোট হিসাবে গণনা করা হয়।

নিবন্ধগুলি "1- "9মুছে ফেলা ইতিহাস রেজিস্টার। সঙ্গে "1সর্বশেষ বৃহৎ মুছে ফেলার বা পরিবর্তন অপসারণ ধারণকারী, এবং "9প্রাচীনতম বৃহৎ মুছে ফেলার বা পরিবর্তন অপসারণ রয়েছে। শুধু মোছাগুলিকে যে এক লাইন বা তার বেশি, অর্থাত্ মোছাগুলিকে ছোট হয় না, সম্মুখের ধাক্কা পেতে "1- "9

যে কোনও ক্রিয়াকলাপ যা কোনও রেজিস্টার পরিবর্তন করে, তার অনুলিপি সর্বদা ডিফল্ট, ওরফে নামবিহীন নিবন্ধে রাখা হয় ""। আপনি স্পষ্টভাবে কোনও নিবন্ধকের নাম না রাখলে এটি ব্যবহার করা রেজিস্টার।

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

ব্ল্যাকহোল রেজিস্টার "_আপনাকে প্রথমে একটি ছোট মুছে ফেলার মতো কাজ করতে দেয়, তারপরে "_আপনার ছোট মোছার রেজিস্ট্রেশনটি পরিবর্তন না করেই আরও অনেকগুলি মুছে ফেলার জন্য "-, তারপরে আপনার প্রথম ছোট মোছার পেস্ট করুন।

অন্যান্য নিবন্ধগুলি হ'ল সর্বশেষ registerোকানো নিবন্ধক "., ফাইলের নাম নিবন্ধ "%এবং "#কমান্ড রেজিস্টার ":, অনুসন্ধান নিবন্ধ "/এবং এক্সপ্রেশন রেজিস্টার "=

আপনি কমান্ড দ্বারা এই সমস্ত নিবন্ধ এবং তাদের বিষয়বস্তুর একটি তালিকা পেতে পারেন :register। এই আদেশটি পরীক্ষা-নিরীক্ষা করতে এবং কোথায় শেষ হয় তা শিখতে খুব দরকারী।


2

আমার এটি প্রায়শই প্রয়োজন, সর্বাধিক গতি সহজ করার জন্য এবং মঞ্জুরি দেওয়ার জন্য আমি একটি প্লাগইন লিখেছিলাম: রিপ্লেস উইথরেজিস্টার

এই প্লাগইনটি একটি দ্বি-ইন-ওয়ান grকমান্ড সরবরাহ করে যা {গতি} / পাঠ্য অবজেক্ট, সম্পূর্ণ লাইন (গুলি) বা বর্তমান নির্বাচনের দ্বারা নিবন্ধকের সামগ্রীর সাহায্যে আচ্ছাদিত পাঠকে প্রতিস্থাপন করে; পুরানো পাঠ্যটি ব্ল্যাকহোল রেজিস্টারে মুছে ফেলা হয়েছে, অর্থাৎ এটি চলে গেছে। এটি স্বচ্ছভাবে অনেক কোণার কেসগুলি পরিচালনা করে এবং স্ট্যান্ডার্ড .কমান্ডের মাধ্যমে দ্রুত পুনরাবৃত্তি করার অনুমতি দেয় । আপনি যদি এটি পছন্দ না করেন তবে এর পৃষ্ঠায় বিকল্পগুলির লিঙ্ক রয়েছে।


2

পেস্টটির পুনরাবৃত্তি করতে পরিবর্তন কমান্ডটি ব্যবহার করুন।

cw ^R0ESC (Register আর = নিয়ন্ত্রণ + আর; 0 রেজিস্টারের জন্য 0)

রেগ থেকে বিষয়বস্তু সঙ্গে শব্দ প্রতিস্থাপন করা হবে। 0 এবং এর সাথে এটি পুনরাবৃত্তি করা যাক.

cgnঅনুসন্ধানের নিদর্শনগুলি প্রতিস্থাপন করতে এটি (ভিআইএম 7.4) এর জন্য দুর্দান্ত :

  • /বা এর সাথে প্রথম অনুসন্ধান করুন*
  • cgn ^R0ESC
  • .পরের ম্যাচে পুনরাবৃত্তি করতে বা nএড়িয়ে যেতে

1

যেহেতু এটি এখনও অন্তর্ভুক্ত করা হয়নি, আপনি সাধারণত স্ট্রিংগুলি এর সাথে প্রতিস্থাপন করেন :%s/.../.../এবং আপনি আপনার কার্সারের নীচে শব্দটি দিয়ে এটি করতে পারেন।

  1. আপনি কমান্ডের প্রথম অংশটি প্রবেশ করান, আপনি যা অনুসন্ধান করছেন: :s/find/
  2. তারপরে আপনি <ctrl-r>যে শব্দটি এর সাথে প্রতিস্থাপন করতে চান তার সাথে ক্লিক করে আপনি বেছে নিন।
  3. তারপরে আপনি কমান্ড লাইনে কার্সারের নীচে শব্দটি আটকে দিতে <ctrl-w>(ছোট "শব্দ") বা <ctrl-a>(বড় "শব্দ) ক্লিক করুন
  4. তারপরে আপনি কমান্ডটি শেষ করুন।

কমান্ড লাইনে কার্সার স্টাফগুলি কীভাবে ব্যবহার করা যায় সে সম্পর্কে লিঙ্কটি দেখুন ।


1

আমি সাধারণত এই ব্যবহার করুন: ywহ্যাঁচকা টান থেকে foo, তারপর মুছে ফেলতে barসঙ্গে dw, এবং চূড়ান্ত পদক্ষেপ, করা যেমন fooরেজিস্টার থেকে 0যা ব্যবহার করে পাঠ্য yanked ঝুলিতে "0p.প্রয়োজন অনুযায়ী পিরিয়ড ( ) সহ পুনরাবৃত্তি করুন ।

এছাড়াও ywএবং এর পরিবর্তে dw, আপনি ব্যবহার করতে পারেন yiwএবং diw(অতিরিক্ত লক্ষ্য করুন i- এর অর্থ অভ্যন্তরীণ )। এটির সাহায্যে আপনি কেবল শব্দ শুরুর দিকে নয়, এর অভ্যন্তরের যে কোনও অবস্থান থেকে শব্দটি ইয়াঙ্ক বা মুছতে পারেন ।


0

নির্বাচন অঞ্চলটি প্রসারণের জন্য আমি এই প্লাগইনটি ব্যবহার করি: https://github.com/terryma/vim-expand-region

সুতরাং একটি শব্দ পরিবর্তন করার জন্য আমার সংমিশ্রণটি হবে: শব্দের যে vvpকোনও জায়গায়।

পেস্টের পরে নামহীন নিবন্ধের সামগ্রী সংরক্ষণ করার জন্য আমার কাছে একটি হ্যাকও রয়েছে যাতে আমি এটির পুনরাবৃত্তি করতে পারি।

vnoremap p p:let @"=@0 <CR>
vnoremap P P:let @"=@0 <CR>

(আমার ক্লিপবোর্ডটি স্বনির্বাচিত)


0

আমি কপিরাইট শব্দের সাথে বর্তমান শব্দটি প্রতিস্থাপন করতে নীচে কী ম্যাপিং ব্যবহার করছি।
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>

yiwএকটি শব্দ অনুলিপি করুন। একটি শব্দ নেভিগেট করুন। ,rrশব্দ প্রতিস্থাপন।
লিডার কী মানচিত্র ,


,rwআরও বুদ্ধিমান হবে, এবং কিউওয়ার্টি সম্ভবত একটি স্মিডজেন সহজ এবং দ্রুত বেল্ট আউট। ডিভোরাক-এ, আমি বেছে নিয়েছি ,rc, যা এগুলি মোটেই বোঝা যায় না, এটি তাদের সবার চেয়ে সহজ এবং দ্রুত। ডিভিওরাক-এ, ,rwএকটি হরর শো;)
পল পার্কার

0

প্রথমে আপনি যে শব্দটি ইয়াঙ্ক করতে চান তার শুরুতে নেভিগেট করুন। আপনি যদি শব্দের মাঝখানে থাকেন তবে bএটির শুরুতে ফিরে যেতে কেবল করুন । তারপরে yeপুরো শব্দটি ইয়েঙ্ক করার জন্য কোনও পেছনের জায়গা ছাড়াই ( yank to end)। সম্ভবত করে - অবশেষে, যে শব্দটি আপনি প্রতিস্থাপন করতে চান সেটিতে যান wকয়েক বার - এবং না vepপ্রবেশ করতে v, isual নির্বাচন মোড নির্বাচন eশব্দের য়, এবং pবিষয়বস্তু গত yanked Aste।

(যদি কেউ জানতে চান যে আমি কেন স্বীকৃত উত্তরের yeপরিবর্তে ছোট্ট পরিবর্তনের পরিবর্তে গ্রহণযোগ্য উত্তর সম্পর্কে মন্তব্য করি নি yw, কারণ এটি এই স্ট্যাকের উপর আমার খ্যাতি এখনও খুব কম))


0
  1. ywবিশ্বের ইয়াঙ্ক ব্যবহার করুন , আপনি পরিবর্তন করতে চান যে বিশ্বে যান।
  2. vবিশ্ব veবা vwআপনার অবস্থার উপর নির্ভর করে নির্বাচন করতে ব্যবহার করুন ।
  3. pনির্বাচিত ব্লকটি প্রতিস্থাপন করতে আপনি অনুলিপি করেছেন এমন বিশ্ব জুড়ে প্রবেশ করুন

0

অন্যান্য আরও ভাল উত্তর যুক্ত করা। কিছুটা সুস্পষ্ট তবে আপনি মোছার আগে আপনি কেবল পেস্ট করতে পারেন। 'yw' এরপরে আপনি যে শব্দটি প্রতিস্থাপন করতে চান সেটি যান, 'pldw' (পেস্ট করুন, একটি অক্ষর ডানদিকে সরান, শব্দ মুছুন)।

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