আমি কীভাবে ভিমের একাধিক লাইনে লাইনের মাঝখানে পাঠ্য সন্নিবেশ করতে পারি?


91

বলুন আমার কাছে দশটি লাইন আছে এবং আমি এই লাইনে ঘটে এমন কোনও শব্দের পাঠ্য প্রিপেন্ড করতে চাই? এটি লাইনের শুরুতে হবে না।

থেকে:

sdfsd   foo sdfsd
sfsd    foo fsdf
sdfsdf  foo  sdfsdf

প্রতি:

sdfsd   bar(foo sdfsd
sfsd    bar(foo fsdf
sdfsdf  bar(foo  sdfsdf

এটি সম্ভব না শুধুমাত্র পূর্বে লিখুন হয় bar(কিন্তু আসলে পারিপার্শ্বিক fooসঙ্গে bar(foo)?

আমি //একাধিক লাইনে মন্তব্য (সি-স্টাইল মন্তব্য) যুক্ত করার দ্রুত উপায়ও চাই ।

আমি Vim / GVim 7.2 ব্যবহার করি।


4
সি স্টাইলের মন্তব্যগুলি হ'ল / * * / বিসিপিএল স্টাইলের মন্তব্যগুলি //
উইলিয়াম পার্সেল

উত্তর:


169

প্রথমে যান foo, টিপুন Ctrl- vভিজ্যুয়াল ব্লক মোডে প্রবেশ করতে এবং সাথে সমস্ত লাইন fooচিহ্নিত না হওয়া পর্যন্ত নীচে টিপুন । তারপরে Shift- iপ্রথমে সন্নিবেশ করতে (ব্লকের) টিপুন । আপনি যখন কাজ শেষ করে টিপুন Esc, সন্নিবেশিত অক্ষরগুলি চিহ্নিত ব্লকের বামে প্রতিটি লাইনে যুক্ত হবে।

শেষে সন্নিবেশ করতে, আবার চাপুন Ctrl- v, সমস্ত প্রভাবিত রেখাগুলি চিহ্নিত করতে উপরে / নীচে সরান এবং তারপরে চাপুন Endবা $লাইনের শেষ না হওয়া পর্যন্ত নির্বাচনটি প্রসারিত করুন। এখন আপনি টিপতে পারেন Shift- aআগের মতোই সমস্ত লাইনের শেষে যুক্ত করতে Shift- i

ভিজ্যুয়াল নির্বাচনটি সাধারণ চলন আদেশের সাহায্যেও করা যেতে পারে। সুতরাং সিতে একটি সম্পূর্ণ ব্লক মন্তব্য করতে আপনি খোলার ব্রেসটিতে যেতে পারেন এবং টাইপ করতে পারেন Ctrl- v % Shift- i // Esc


4
কেবলমাত্র একটি সংযোজন: যদি উইন্ডোজের ভিমে ভিজ্যুয়াল ব্লক মোডটি Ctrl-V শুরু না করে তবে তার পরিবর্তে একজনকে Ctrl-Q ব্যবহার করা উচিত।
পল

4
তারপরে উত্তরের একটি ভিন্নতা হ'ল ভিজ্যুয়াল ব্লককে শিফট + ভি দিয়ে চিহ্নিত করতে হবে এবং ব্লকটিকে প্রাক্তন মোডে শিরোনাম:: '<,'> s / ^ / prexix_text /: '<,'> s / $ / প্রত্যয়_পাঠ / নোট "" < , '> "টিপলে স্বয়ংক্রিয়ভাবে উইম দ্বারা মুদ্রিত হয়": "।
ডিম্বা

4
অজানাতে ভিজ্যুয়াল ব্লক ব্যবহার করুন (সিটিআরএল + ভি দিয়ে চিহ্নিত করুন)। মন্তব্যে "//" চিহ্নযুক্ত একটি কলাম মন্তব্যগুলি সরানোর জন্য "d" টিপুন। সি ++ মন্তব্য (/ ** /) সম্পর্কেও ভুলে যাবেন না :)
ডিম্বা

9
লিনাক্সে লক্ষ্য করার মতো বিষয় যে সমস্ত লাইনে উপসর্গ প্রয়োগ করার আগে আমাকে সন্নিবেশ মোডের বাইরে পালাতে হয়েছিল, এবং এটি একটি মূলধন যা আমার ভিজ্যুয়াল মোড থেকে সন্নিবেশ মোডে প্রবেশ করা প্রয়োজন - অর্থাত শিফট + আই, প্রিফিক্স টাইপ করুন, এস্কেপ, এস্কেপ।
জোশুয়া এনফিল্ড

6
এটি পুট্টিতে কাজ করে না। আমি যখন চাপ দিই তখন iকিছুই হয় না। যখন আমি টিপুন shift+iনির্বাচনটি অদৃশ্য হয়ে যায় তবে আমি পাঠ্য সন্নিবেশ করতে সক্ষম (বর্তমান স্থানে যেখানে কার্সারটি কেবলমাত্র)।
জর্জেন পল

44

আপনার প্রথম প্রশ্নের উত্তর, নীচে

:%s/foo/bar(&)/g

fooসাথে মিলবে এবং প্যাটার্নটিকে ঘিরে ফেলবে bar()/gএক লাইন এই একাধিক বার চেষ্টা করতে হবে।

যেহেতু আপনি শুধু মিলে করছি foo, আপনি একটি সহজ করতে পারে :s/foo/bar(foo)/g। উপরেরগুলি কাজ করবে, তবে আপনি যদি কোনও সাধারণ শব্দ (উদাঃ f[a-z][a-z]) এর পরিবর্তে নিয়মিত প্রকাশের সাথে মিলের সিদ্ধান্ত নেন match উপরের 'এবং' আপনি কী মিলেছে তা উপস্থাপন করে।


ম্যাক্রোগুলির সাথে আমার একটি দীর্ঘ দীর্ঘ উত্তর ছিল। এটি উপায় সহজ :-)
ব্রায়ান রামসে

আপনি একাধিক লাইনের জন্য এটি কীভাবে করবেন? একটি ব্যবহারিক ক্ষেত্রে হ'ল যখন আপনার কাছে কোডের একটি ব্লক অনুরূপ লাইনের সমন্বয়ে থাকে যা এই প্রতিস্থাপনের প্রয়োজন।

এটি নিশ্চিতভাবে দেখে মনে হচ্ছে এটি সমস্ত লাইনে কাজ করে ... নোট:% s এবং / জি।
ojrac

মজার বিষয়টি হ'ল:% s / foo / বার (&) / গিসি নিশ্চিত করে না - 'গ' এর কোনও প্রভাব নেই..ঘা

4
:এবং এর মধ্যবর্তী পাঠ্যটি sনির্ধারণ করে যে এটি কোন লাইনে কাজ করে। কিছুই বোঝায় না এখনকার লাইন। 1,30মানে লাইন 1 থেকে 30 (অন্তর্ভুক্ত)। '<,'>বর্তমান চাক্ষুষ নির্বাচনের লাইনগুলি বোঝায়।
রামপিন

17

লাইনের একটি সেট উপসর্গ করতে আমি দুটি ভিন্ন পদ্ধতির একটি ব্যবহার করি:

একটি পদ্ধতির ব্লক নির্বাচন (sth দ্বারা উল্লিখিত) হয়। সাধারণভাবে, আপনি একটি আয়তক্ষেত্র অঞ্চল নির্বাচন করতে পারেন যার সাথে ctrl-Vকার্সার-চলাচল করা হবে। একবার আপনি একটি আয়তক্ষেত্রটি হাইলাইট করার পরে, টিপে টিপে আয়তক্ষেত্রের shift-Iবাম দিকে অক্ষর সন্নিবেশ করানো shift-Aহবে বা তাদের আয়তক্ষেত্রের ডানদিকে যুক্ত করা হবে। সুতরাং আপনি এই কৌশলটি একটি আয়তক্ষেত্র তৈরি করতে ব্যবহার করতে পারেন যা আপনি উপসর্গ করতে চান, রেখাটির shift-Iউপসর্গটি টাইপ করুন, এবং তারপরে পালাতে হিট করতে চান এমন রেখার বাম-কলাম অন্তর্ভুক্ত includes

অন্য পদ্ধতির বিকল্প হ'ল (ব্রায়ান অগ্নিউ দ্বারা উল্লিখিত) use ব্রায়ানের প্রতিস্থাপন পুরো ফাইলকে প্রভাবিত করবে (কমান্ডের% "অর্থ" সমস্ত লাইন ")। কয়েকটি লাইনকে প্রভাবিত করার shift-Vজন্য প্রথম / শেষ লাইনে থাকা অবস্থায় (যা ভিজ্যুয়াল-লাইন মোড সক্ষম করে) হিট করা এবং তারপরে সর্বশেষ / প্রথম লাইনে চলে যাওয়া সহজতম পদ্ধতির affect তারপরে টাইপ করুন:

:s/^/YOUR PREFIX/

^ হ'ল একটি রেজেক্স (এই ক্ষেত্রে, লাইনের শুরু)। ভিজ্যুয়াল লাইন মোডে এটি টাইপ করে আপনি '<,'> স্বয়ংক্রিয়ভাবে এর আগে sertedোকানো দেখতে পাবেন। এর অর্থ প্রতিস্থাপনের পরিসীমাটি ভিজ্যুয়াল নির্বাচন হবে।

অতিরিক্ত টিপ: যদি আপনার উপসর্গটিতে স্ল্যাশ থাকে তবে আপনি সেগুলি ব্যাকস্ল্যাশ সহ এড়াতে পারবেন, অথবা আপনি পৃথক বিরামচিহ্ন অক্ষর পৃথককারী হিসাবে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, সি ++ লাইন মন্তব্য যুক্ত করতে, আমি সাধারণত লিখি:

:s:^:// :

প্রত্যয় যুক্ত করার জন্য প্রতিস্থাপনের পদ্ধতিটি সহজেই সহজ হয় যদি না আপনার সমস্ত লাইন একই দৈর্ঘ্য হয়। কেবলমাত্র of পরিবর্তে প্যাটার্নের জন্য use ব্যবহার করুন এবং আপনার স্ট্রিং প্রাক-পেন্ডডের পরিবর্তে সংযুক্ত হবে।

আপনি যদি একই সাথে একটি উপসর্গ এবং প্রত্যয় যুক্ত করতে চান তবে আপনি এটির মতো কিছু করতে পারেন:

:s/.*/PREFIX & SUFFIX/

। * পুরো লাইনের সাথে মেলে। & প্রতিস্থাপনে ম্যাচযুক্ত পাঠ্যটি (পুরো লাইনটি) পিছনে রাখে তবে এখন এটিতে আপনার উপসর্গ এবং প্রত্যয় যুক্ত হবে।

বিটিডাব্লু: কোড মন্তব্য করার সময় আপনি সম্ভবত এটি পরে অসুবিধায়িত করতে চাইবেন। আপনি ctrl-Vস্ল্যাশগুলি নির্বাচন করতে ভিজ্যুয়াল-ব্লক ( ) ব্যবহার করতে পারেন এবং তারপরে মুছে ফেলার জন্য ডি টিপুন বা আপনি shift-Vএই জাতীয় নেতৃস্থানীয় স্ল্যাশগুলি সরিয়ে ফেলতে বিকল্প ব্যবহার করতে পারেন (সম্ভবত একটি ভিজ্যুয়াল লাইনের সাথে নির্বাচন সহ ):

:s:// ::

6

: উদ্ধারকাজ স্বাভাবিক!

:%norm Wibar(

:%norm WEa)

: আদর্শ (আল) কমান্ডগুলি এমনভাবে পুনরায় প্রদর্শন করে যাতে আপনি সেগুলি টাইপ করেছেন:

ডাব্লু - পরের শব্দ যায়

i - সন্নিবেশ মোড শুরু করে

বার (- অনুক্রম 'বার (' টাইপ করুন

বা এক লাইনে:

:%norm Wibar(ctrlvESCEa)

আপনি যদি উইন্ডোজ চালাচ্ছেন তবে ctrlqতার পরিবর্তে টাইপ করুন ctrlv


3

তবুও আরেকটি সম্ভাবনা (আপনার পরীক্ষার ক্ষেত্রে সম্ভবত এটি তেমন কার্যকর নয়, তবে অন্যান্য পরিস্থিতিতে কার্যকর) আপনি যে অঞ্চলটি চিহ্ন দিয়ে পরিবর্তন করতে চান তা বন্ধ করে দেওয়া।

  • উপরের লাইনের যে কোনও জায়গায় কার্সারটি রেখে চাপুন 'a
  • কার্সারটি সর্বশেষ লাইনের যে কোনও জায়গায় রেখে টিপুন 'b
  • কমান্ড জারি করুন :'a,'b s/foo/bar(&)/

আমি সাধারণত ভিজ্যুয়াল ব্লক মোডটি পছন্দ করি যদি সমস্ত কিছু স্ক্রিনে দৃশ্যমান হয় এবং আমি সাধারণত স্ট্রাক এবং স্টপগুলি অনেকগুলি স্ক্রিন দ্বারা পৃথক করা হলে চিহ্ন পছন্দ করি।


নতুন মার্কার সেট করার mপরিবর্তে এটি হওয়া উচিত ''একটি বিদ্যমান মার্কারের লাইনে জাম্পিংয়ের জন্য। `সেই মার্কারের লাইন এবং কলামে ঝাঁপ দেয়।
টিকটাক


0

সি-স্টাইলের মন্তব্যের জন্য, ব্রায়ান কর্তৃক রিজেপএক্স উত্তরটি ব্যবহার করুন এবং লাইন এন্ডিংয়ের সাথে ম্যাচ করুন $এবং সন্নিবেশ করান।

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