ভিম: এর আগে অন্য এক হাঁক দিয়ে একটি লাইন প্রতিস্থাপন করা


112

প্রতিদিন কমপক্ষে একবারে আমার নিম্নলিখিত পরিস্থিতিতে থাকে:

A: This line should also replace line X
...
X: This is line should be replaced

আমি বিশ্বাস করি যে আমি সেই কাজটি দক্ষতার সাথে সম্পাদন করি না।

আমি কি করবো:

  • এ লাইনে যান: এজি
  • ইয়াঙ্ক লাইন আ:
  • এক্স লাইনে যান: এক্সজি
  • পেস্ট লাইন এ: পি
  • পুরানো লাইনে সরান: j
  • পুরানো লাইন মুছুন: ডিডি

এই অতিরিক্ত অসুবিধা যে লাইন এক্স ডিফল্ট রেজিস্টার, যা যদি আমি অন্য লাইন যে উ: Yanking দিয়ে প্রতিস্থাপিত করা উচিত এবং একটি অতিরিক্ত রেজিস্টার থেকে আটকানো হচ্ছে এটি বিরক্তিকর এখন আছে ( "ayy , " পি ) এই সহজ কাজ এমনকি তোলে কম দক্ষ

আমার প্রশ্নগুলো:

  • আমি পূর্বে ইয়াঙ্কড লাইনটি প্রতিস্থাপন করতে কোনও বিল্ট-ইন ভিম কমান্ডটি মিস করেছি?
  • যদি তা না হয় তবে আমি কীভাবে আমার নিজের কমান্ডটি বাঁধতে পারি যা ডিফল্ট রেজিস্টারে ইয়্যাঙ্কড লাইনটি ছেড়ে দেয় (বা পুনরুদ্ধার করে)?

2
এটি ভিমের সম্পাদনা মডেলটির সাথে আমার একক বৃহত্তম সমস্যা। আমি একটি সমাধান জানতে চাই। একটি সিইউএ সম্পাদক কাটা এবং মুছার মধ্যে পার্থক্য করে, তাই আপনি কেবল কিছু পাঠ্য কেটে ফেলুন, তারপরে আপনি মুছতে এবং নিজের পছন্দমতো পেস্ট করতে পারেন। ভিমের সাহায্যে, কোনও মুছুন আপনি নিজের কাটা পাঠ্যকে ট্র্যাশ তৈরি করেন। আপনি অন্য কোনও সম্পাদকের চেয়ে অনেক বেশি কী-স্ট্রোক ব্যবহার করে শেষ করেছেন।
কাদা


@Mud সম্পর্কে জানতে :moveএবং কালো গহ্বর রেজিস্টার ( _) (বা সত্য, মাত্র রেজিস্টার)
sehe

2
@ আমি নিবন্ধগুলি সম্পর্কে পুরোপুরি সচেতন, তবে এতে কাট / পেস্ট অপারেশন প্রতি 4 টি কীস্ট্রোক যুক্ত হয়েছে এবং আরও পূর্বাভাসের প্রয়োজন। আপনি যখন অনেকগুলি সম্পাদনা করছেন তখন তা দ্রুত বাড়িয়ে তোলে।
মাড

কয়েক বাইট মেমরি সঞ্চয় করা ছাড়াও ব্ল্যাকহোল রেজিস্টার অন্য কোনও রেজিস্টারের বিপরীতে ব্যবহার করার সুবিধা রয়েছে কি? আমি যুক্তি দিয়ে বলব যে কোনও রেজিস্ট্রার ব্ল্যাকহোল রেজিস্টার হতে পারে যদি আপনি এটি থেকে ফিরে না পড়েন।
স্ল্যাব্ল্যাঙ্ক

উত্তর:


91

আমি কি করব:

  1. aG
  2. Y
  3. xG
  4. Vp

আপনি স্বাভাবিক মোড ত্যাগ করতে হবে না, কিন্তু এটি করে Yank লাইন। তবে আপনি ব্যবহার করতে পারেন V"0pযা সর্বদা ২ য় ধাপে লাইনটি ইয়েঙ্কড রাখবে।


11
@ ডডল: হ্যাঁ, Yপ্রতিশব্দyy
আইসক্রিম

8
1 এবং 2 টি পদক্ষেপের সাহায্যে একত্রিত হতে পারে: ay [উদা: 20y] ভিপি অনুসরণ করে কৌশলটি করা উচিত। এটি ইয়েঙ্ক করার জন্য আপনাকে কোনও লাইনে যেতে হবে না।
ভরদ

2
আপনি যদি ভি "0 পি এর পরিবর্তে সিসিটিআরটিএল + আর ০ ই এস সি দিয়ে অতিরিক্ত লাইনগুলি ওভাররাইট করে থাকেন তবে নীচের সমস্ত লাইনগুলি কেবলমাত্র দিয়ে প্রতিস্থাপন করা যেতে পারে ((পুনরুক্তিকারী)
জর্ডান মরিস ২

Yএর প্রতিশব্দ yy, তবে আমি এটি y$ম্যাচ Dএবং পুনরায় তৈরি করার পরামর্শ দিই C
মিগল্ড

নীচে জর্ডান মরিস stackoverflow.com/users/970673/jordan-morris এর উত্তর দেখুন - সত্যই আপনাকে একাধিকবার কমান্ড পুনরাবৃত্তি করার অনুমতি দিয়ে ভিআইএম কমান্ডগুলি পুরোপুরি ব্যবহার করে।
JESii

105

Vp: লাইন নির্বাচন করুন, ইয়াঙ্কড যা ছিল তা পেস্ট করুন


3
VPঠিক তেমনি কাজ করে, যা সুবিধাজনক কারণ আপনি শিফটকে পুরো অনুক্রমের জন্য রাখতে পারেন।
জর্জ হিলিয়ার্ড

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

8
@ আসরে_আর, আপনি যদি এটি করেন তবে এটি দুর্দান্তভাবে খেলবে V"0p, যা সর্বশেষ ইয়্যাঙ্কড রেজিস্টার থেকে আটকানো হয়েছে ।
timblaktu

@timblaktu আপনি কি ব্যাখ্যা করতে V"0pপারেন? ভি ভিজ্যুয়াল লাইন লাইন মোডে যায় এবং পি পেস্ট করার জন্য। "এবং 0" কী জন্য? ধন্যবাদ
থিওগ্রাম প্রোগ্রামার

43

এক্সটির অতিরিক্ত অসুবিধা রয়েছে যে এক্সটি এখন ডিফল্ট রেজিস্টারে রয়েছে, যা যদি আমি অন্য লাইনটি এ এর ​​সাথে প্রতিস্থাপন করা উচিত তবে এটি বিরক্ত করে is

সাধারণ রেজিস্টারগুলিকে প্রভাবিত না করে পাঠ্য মুছতে আপনি ব্ল্যাকহোল রেজিস্টারটি ব্যবহার করতে পারেন "_:

"_dd

10
আমি ব্ল্যাকহোলটি তৈরি করতে dএবং ddসর্বদা ব্যবহার করতে আমার .vimrc এ কিছু ম্যাপিং যুক্ত করেছি xএবং xxবেশিরভাগ সম্পাদকরা "কাট" (ডিফল্ট রেজিস্টারে মুছুন এবং সংরক্ষণ করুন) noremap x d noremap xx dd noremap d "_d noremap dd "_dd
ডাকবেন তা সম্পাদন করলাম

2
আমি ভিআইএম-এ রিম্যাপ করা জিনিসগুলি সম্পর্কে সতর্ক, কারণ অন্য কম্পিউটারগুলিতে বা আইডিই-র জন্য ভিআইএম-স্টাইলের প্লাগইনগুলিতে এটি সহজ না হতে পারে easy এছাড়াও ভিআইএম এর ডিজাইনাররা যদি সত্যিই খনন করেন তবে ডিফল্ট ম্যাপিংয়ের সাথে সমস্যার সমাধান করার ঝোঁক থাকে।
জর্ডান মরিস ২

15

যে উত্তরগুলিতে কোনও লাইন ব্যবহার করে Vpবা VPপেস্ট করার পরামর্শ দেয় সেগুলি তৈরি করা - ইয়াঙ্ক রেজিস্টারের বিষয়বস্তু পরিবর্তন করা এড়াতে আমি সর্বাধিক অর্গোনমিক কমান্ডটি পাই:

VPY


এটি হ'ল সরল সমাধান যা ইয়াঙ্কের বিষয়বস্তুগুলিকে একই রাখে। অনেক ধন্যবাদ!
হেলিক্লটসমে

14
  1. yy
  2. j (আপনি যে লাইনে প্রতিস্থাপন করতে চান তাতে যান) এবং তারপরে
  3. ভিপি (বড় হাতের ভি এবং তারপরে পি, ইয়াঙ্কড সামগ্রী দিয়ে প্রতিস্থাপন করবে)

অসাধারণ! প্রকৃতপক্ষে খুব সংক্ষিপ্ত এবং ভিজ্যুয়াল মোডের সাথে একাধিক লাইন নির্বাচন করা সহজ করে তোলে। এটি পেস্ট বাফারটি অক্ষত রাখে। ডিডি যখন সেই বাফারটিকে ওভাররাইট করে দেয় তখন বিরক্ত হয় ...
আকতাউ

@ আকতাউ এটি বাফারটি অক্ষত রাখবে না।
জর্ডান মরিস

9

আমি কমান্ডলাইন (প্রাক্তন) মোড ব্যবহার করব এবং নিম্নলিখিত দুটি কমান্ড করব

:XmA
:Ad

এটি কেবল লাইন এক্সকে কেবল এ এর ​​নীচে স্থানান্তরিত করে, তারপরে একটি লাইনটিকে একটি মুছে ফেলবে

উদাহরণ স্বরূপ

:7m3
:3d

আপনি কি একটি উদাহরণ দিতে পারেন? আমি যখন 50Gm30G উদাহরণস্বরূপ টিপবো তখন ভিম 50 লাইনে যাবে এবং তারপরে নীচে যাবে এবং এটিই। এছাড়াও: বিজ্ঞাপন A = ​​50 বা A = 50G এর জন্য কিছুই করে না
ক্রিস্পে

7
  1. প্রথম লাইনের শুরুতে সরান।

  2. y, $- শেষে লাইন ব্রেক ছাড়াই লাইনটি অনুলিপি করুন

  3. লক্ষ্য রেখার শুরুতে সরান।

    1. V, p- কেবলমাত্র একটি লক্ষ্য রেখা প্রতিস্থাপন করুন

    2. c, c, Ctrlr, 0, Esc- লক্ষ্য লাইন মূল Yank প্রতিস্থাপন

  4. পরবর্তী টার্গেট লাইনের শুরুতে সরান।

  5. . - 4.2 এ জারি করা আদেশটি পুনরাবৃত্তি করে।

মন্তব্য:

  • ৪.১ হ'ল y, $কারণ যদি আপনি এটি করেন y, yবা Yআপনি লাইনব্রেকটি অনুলিপি করবেন এবং Ctrlr0আপনার টার্গেট লাইনের নীচে লাইন ব্রেককে যুক্ত করে।

  • ৪.২ প্রতিস্থাপন করে V p, যা পুনরাবৃত্তির সাথে কাজ করে না কারণ প্রযুক্তিগতভাবে শেষ ক্রিয়াটি মুছে ফেলা হয়, সুতরাং .কেবল একটি লাইন মুছবে।

  • এক্স মোড (কমান্ড লাইন) থেকে কীভাবে 'রেজিস্টারের সাথে বর্তমান লাইনটি প্রতিস্থাপন' জারি করতে হয় তা যদি কেউ জানেন তবে আমি আপনার কাছ থেকে শুনতে চাই (এবং আপনি কোথায় ডকুমেন্টেশন পেয়েছেন) তা জানতে চাই। পুনরাবৃত্তিযোগ্য এক্স কমান্ড থাকতে পারে যা ৪.২ এর চেয়ে দ্রুত এবং / অথবা লাইনব্রেক ক্যাভিয়েট নেই।


1
স্টেপ ৪.২ হ'ল এখানে হত্যাকারী, আপনি এখন ৪.৩-এর মতো ডট কমান্ড দিয়ে পুরো প্রক্রিয়াটি পুনরাবৃত্তি করতে পারবেন - যা ভিম সম্পর্কে!
JESii

1
আমি এই না। 'এজি' আমার নির্মাতাকে লাইনের শেষে রাখে, সন্নিবেশ মোডে প্রবেশ করে এবং একটি 'জি' তে প্রবেশ করে। আমি কী পাই না তা কী?
gustafbstrom

@ গুস্টাফব্রস্টম সুষ্ঠু সমালোচনা - দুঃখিত, এ-র লাইনের নম্বরটি উপস্থাপন করার কথা ছিল, তবে আমি তা উল্লেখ করতে ব্যর্থ হয়েছি। সম্পাদনা করা হয়েছে।
জর্দান মরিস

5

এখানে আমি কি করব

  • A রেখার শুরুতে সরান, AG(যেখানে A স্পষ্টতই একটি রেখা সংখ্যা)
  • কিছু রেজিস্টারে ইয়াঙ্ক লাইন, যেমন একটি (নতুন লাইন ছাড়াই)। আদর্শ"ay$
  • সন্নিবেশ রেখায় সরান, XG
  • বিকল্প লাইন, S
  • একটি রেজিস্টার থেকে sertোকান Ctrl-Ra

4

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

  • এ লাইনে যান: AG
  • ভিজ্যুয়াল মোড সহ লাইনটি নির্বাচন করুন: VESC
  • এক্স লাইনে যান: XG
  • রেখার জন্য বিকল্প মোড লিখুন: S
  • আপনার অনুলিপি করা লাইনটি আটকে দিন: shift+ insert(বা ক্লিপবোর্ড থেকে আটকানোর জন্য আপনার ম্যাপিং অন্য যা কিছু রয়েছে)।

আহ। ভি এবং এস সম্পর্কে জানতেন না । তবে, আপনার পদক্ষেপগুলি আমার পক্ষে কার্যকর হয় না কারণ আমি আমার ওএস ক্লিপবোর্ডে ইয়েঙ্ক না করি, যা কেবলমাত্র আমি সন্নিবেশ মোডে অ্যাক্সেস করতে পারি। সুতরাং আমি প্রথমে সন্নিবেশ মোড ছেড়ে যেতে হবে।
ক্রিস্পে

3

আপনি এটি করতে পারেন:

Vy (in normal mode at the line you want to copy)
Vp (in normal mode at the line you want to replace)
  • স্পেস বা লাইন শেষ তৈরি করে না।
  • অনুলিপি করা পাঠ্যের শুরুতে কার্সারটি স্থাপন করা হয়।

একই কীগুলি একাধিক লাইনের ইয়াঙ্ক / পেস্ট করতে ব্যবহৃত হতে পারে।

V (in normal mode at what you want to yank)
(use jk to move the selection)
y (to yank the selection)
V (in normal mode at where you want to paste)
(use jk to move the selection)
p (to replace the selection with the yanked lines)

2

আপনি এই আদেশগুলি সাধারণ মোডে ব্যবহার করতে পারেন:

:AmX | Xd

mকমান্ড জন্য m[ove], যা, লাইন সংখ্যা এক্স পর লাইন সংখ্যা একটি প্যাচসমূহ আপনি যদি এর পরিবর্তে কপি লাইন সরানো, ব্যবহার করতে চান তাহলে co[py]dকমান্ড জন্যd[elete]

আপনি ব্যবহার করে coবিভিন্ন রেখা সরিয়ে নিতে (ব্যবহার করে অনুলিপি করতে পারেন )

:start,end m X

2

সিকल्डের সাম্প্রতিক মন্তব্যের আলোকে (ধন্যবাদ!), আমি দেখতে পাচ্ছি যে আমি মূল সমস্যাটি পুরোপুরি বুঝতে পারি নি। লাইনটি সরানো উপযুক্ত নয় তবে অনুলিপি করা (যেহেতু লাইনটি ইয়াঙ্কড হয়েছে) তাই আমি এটিকে সংশোধন করব:

:1t20:20d_
  1. ২০ তম লাইনের পরে প্রথম লাইনটি :tকমান্ড করুন ( কমান্ড :copyএটির জন্য একটি উপাধি রয়েছে ) এটি 21 লাইনে রাখবে)

  2. 20 টি লাইন মুছুন, মুছে ফেলা লাইনটিকে 'ব্ল্যাকহোল' রেজিস্টারে রাখুন ( _) (বর্তমান ইয়ঙ্ক বাফারকে প্রভাবিত করবেন না)

সাম্প্রতিক মন্তব্যে উল্লিখিত হিসাবে, এটি বর্তমান কার্সার অবস্থানকে প্রভাবিত করবে না।


1
  1. : ay (যেখানে একটি লাইন নম্বর Example উদাহরণ: 20y)। এটি একটি লাইন ইয়াঙ্কস করে (পাং উদ্দেশ্যে)।
  2. ভিপি

1

আমি এর জন্য প্রাক্তন কমান্ড ব্যবহার করা সহজ মনে করি; প্রাক্তন। 9 থেকে 46 লাইন সরাতে:

 :46|9m.|-1d

এটি কার্সারটিকে 46 রেখায় সরিয়ে নিয়ে যাবে, বর্তমানের নীচে 9 রেখাটি সরিয়ে ফেলবে, তারপরে পূর্ববর্তী লাইনটি মুছবে (যেহেতু সরানো রেখাটি বর্তমান একটি)।

অথবা চিহ্ন (গুলি) ব্যবহার করে, চিহ্নটি 'এ' ব্যবহার করে:

:46ma a|9m'a|'ad

এক্স কমান্ডগুলির সৌন্দর্য হ'ল আপনি যেখানেই আপনার কার্সার (স্বাভাবিক মোডে) থাকবেন সেগুলি চালাতে পারেন run আমি পছন্দ করি :1m20|.+1d(1 লাইনটি 20 এ সরান এবং পরবর্তী লাইনটি মুছুন, অর্থাত্ পাঠ্য যা আগে 20 লাইনে ছিল)। একই ধারণা যদিও!
সার্কেলড

1

আমার প্রায়শই একটি লাইন ওয়াই করতে হয় এবং একাধিক স্থানে এটি প্রতিস্থাপন করতে হয়, যার প্রত্যেকটির আলাদা আলাদা মান থাকে (যার অর্থ আমি একটি রেজেক্স করতে পারি না)।

Y কাঙ্ক্ষিত মূল লাইন ইঙ্ক করতে

এবং তারপরে প্রতিটি লাইনে আপনি প্রতিস্থাপন করতে চান, VpzeroY


0

আমি সহজভাবে "ব্ল্যাকহোল" রেজিস্টারটি ব্যবহার করব:

দেওয়া হলে

nnoremap <সিডি> "_ডিডি

সমাধানটি হ'ল:

<সিডি> yy

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