আমি কীভাবে ভিমে প্রতিটি লাইনের শেষে একটি স্ট্রিং যুক্ত করতে পারি?


256

আমি *ভিমের প্রতিটি লাইনের শেষে যুক্ত করতে চাই ।

আমি কোডটি ব্যর্থ চেষ্টা করেছিলাম

:%s/\n/*\n/g

ইতি কারণ ডান দিকে কাজ করে না :s///, \nএকটি নাল অক্ষর অনুরূপ। বিভাগটি :help sub-replace-specialপ্রাসঙ্গিক।
ডাবলডাউন

উত্তর:


354

:%s/$/\*/g

কাজ করা উচিত. MrWiggles:%s/$/*/g হিসাবে সঠিকভাবে পয়েন্ট করা উচিত ।


একই কলামে ' ' sertোকানোর কোনও উপায় আছে , যেহেতু সমস্ত রেখাগুলি একই দৈর্ঘ্যের নয়, তাই লাইন 1 এর 15 তম কলামে ' ' থাকতে পারে , তবে লাইন 2 এর 25 তম কলামে '*' রয়েছে।
আমান জৈন

11
প্রতি লাইনটিতে কেবল 1 টি EOL রয়েছে, তাই gপতাকাটি অপ্রয়োজনীয়।
ডাবলডাউন

আমি প্রতিটি লাইনের শুরুতে / যুক্ত করতে চেয়েছিলাম: 1, / s / ^ / \ / g আমার পক্ষে কাজ করেছিল।
farooqsadiq

@ ডিরেক্টরজেন্টলি এই কমান্ডের আর্গুমেন্ট হিসাবে আমি স্ট্রিং ভেরিয়েবল কীভাবে পাস করতে পারি (আপনি জানেন যে * এর পরিবর্তে)?
ম্যাথিউস রটা

353

এমনকি এর চেয়ে সংক্ষিপ্ত: অনুসন্ধান কমান্ড:

:%norm A*

এটি এর অর্থ:

 %       = for every line
 norm    = type the following commands
 A*      = append '*' to the end of current line

28
ম্যান, এমন কোনও vi বা vim থ্রেড নেই যা থেকে আমি কিছু শিখি না। আজ আমি আদর্শ সম্পর্কে শিখি। এবং চিয়ার্সে যেমন তারা বলে, "সাধারণ!"
স্মোকামেরন

4
প্রিপেন্ডিংয়ের জন্য, আপনি কেবল 0 আই * ব্যবহার করবেন, 0 আপনাকে লাইনটির শুরুতে নিয়ে যাবে, আমি সন্নিবেশ মোডের জন্য এবং * * এর জন্য *। ডি:
রব

7
একটি ভিমগল্ফার হিসাবে আমি সাহায্য করতে পারি না তবে এটি যুক্ত করার I*পরিবর্তে এটি ব্যবহার করা 0i*আপনাকে একটি কীস্ট্রোক বাঁচিয়ে তুলবে।
জেদিদিয়া হুর্ট

24
অন্য একটি টিপ: এটি সীমার জন্যও কাজ করে। কেবল ভিজ্যুয়াল মোডে এবং লাইনে লাইনগুলি হাইলাইট করুন :, এটি আপনাকে যে কমান্ডটি দিয়ে :'<,'>যেতে পারে তা প্রাক-পূরণ করবে:'<,'>norm A*
জেদিদিহ হুর্ট

8
প্রিপেন্ডিংয়ের জন্য, Iপরিবর্তে ব্যবহার করুন -:%norm I*
জাস্ট লাকি সত্যিই

42

এছাড়াও:

:g/$/norm A*

এছাড়াও:

gg<Ctrl-v>G$A*<Esc>

আহ্ ... দ্বিতীয়টি লাইন নির্বাচনের সাথেও ব্যবহার করা যেতে পারে। নিস!
টিম ফ্লেচার

আপনি দয়া করে প্রথম উদাহরণটি ব্যাখ্যা করতে পারেন?
কোডি পোল

@ কোডিপল gহ'ল globalকমান্ড যা প্রতিটি মিলে যাওয়া লাইনের সাথে কিছু করে। $প্রতিটি লাইনের সাথে মেলে। এটাও হতে পারে ^বা .*। আদর্শ কমান্ডগুলি কার্যকর করে যা আপনি সাধারণত কমান্ড মোডে ব্যবহার করেন। সুতরাং লাইনের শেষে A*সংযোজন *
ডিফ্ল্ট করুন

41

আমি মনে করি এই ধরণের জিনিসটি মোকাবেলার জন্য ভিজ্যুয়াল ব্লক মোড ব্যবহার করা একটি ভাল এবং আরও বহুমুখী পদ্ধতি। এখানে একটি উদাহরণ:

This is the First line.  
This is the second.  
The third.

"হ্যালো ওয়ার্ল্ড" sertোকানোর জন্য। (স্পেস + ক্লিপবোর্ড) এই প্রতিটি লাইনের শেষে:

  • প্রথম লাইনের একটি অক্ষরে, Ctrl-V টিপুন (বা Ctrl-Q টি Ctrl-V পেস্ট করা থাকলে) টিপুন।
  • ভিজ্যুয়াল ব্লকটি তিন লাইনের উপরে প্রসারিত করতে jj টিপুন।
  • প্রতিটি লাইনের শেষে ভিজ্যুয়াল ব্লক প্রসারিত করতে Press টিপুন। একটি স্পেস টিপুন তারপরে হ্যালো ওয়ার্ল্ড টাইপ করুন। তারপর এসকি।

ফলাফল হলো:

This is the First line. Hello world.  
This is the second. Hello world.  
The third. Hello world.  

(উদাহরণস্বরূপ Vim.Wikia.com থেকে )


3
চাপ দেওয়ার পরিবর্তে শেষ লাইনে যেতে jjহিট Gকরতে পারে। এটি বৃহত ফাইলগুলিতে দরকারী, যেখানে jআপনি শেষ লাইনে চাপ না দেওয়া পর্যন্ত চাপ দেওয়া ব্যবহারিক নয়।
ন্যাশ

সম্মত হন যে এখানে ভিজ্যুয়াল ব্লকটি সবচেয়ে পরিষ্কার, আরও এক্সটেনসিবল
পিটার ডোলান

মনে রাখবেন যে এটি প্রথমে সমস্ত লাইনে কাজ করছে বলে মনে হচ্ছে না, তবে আপনি এসসি চাপার পরে এটিটি হয়ে যায় এবং এটি সকলকে যুক্ত করে।
নওমেনন

ভিজ্যুয়াল ব্লক ভিএস কোডের মতো অন্যান্য জিনিসের এক্সটেনশন হিসাবে ভিএম ব্যবহার করার সময় সমস্যা এবং ত্রুটি সৃষ্টি করে। এই ক্ষেত্রে, মূল ব্যবহারকারীটির অনুসন্ধান এবং প্রতিস্থাপন হ'ল এটি নির্ভরযোগ্য বিকল্প।
ব্রেটিনস

আপনি ক্যাপিটাল এ ব্যবহার করেছেন তা নিশ্চিত করুন, ছোট "ক" ব্যবহার করে না।
জেফ হোয়ে

14

আপনি যদি প্রতিটি লাইনের শেষে হ্যালো ওয়ার্ল্ড যুক্ত করতে চান:

:%s/$/HelloWorld/

আপনি যদি নির্দিষ্ট লাইনটির জন্য এটি করতে চান তবে 20 থেকে 30 টি পর্যন্ত ব্যবহার করুন:

:20,30s/$/HelloWorld/

আপনি যদি প্রতিটি লাইনের শুরুতে এটি করতে চান তবে ব্যবহার করুন:

:20,30s/^/HelloWorld/

6

আপনার আসলে gশেষের দরকার নেই। সুতরাং এটি হয়ে যায়:

:%s/$/*

অথবা আপনি যদি *শেষে দেখতে চান তবে লাইনটি 14-18 বলুন:

:14,18s/$/*

অথবা

:14,18norm A*

5

... এবং প্রতিটি লাইন * এর সাথে পুনঃপ্রেড করা (শুরুতে যোগ করুন),

%s/^/*/g

এটি প্রশ্নের উত্তর দেয় না।
ডাবলডাউন

5

একটি বিকল্প হ'ল:

:g/$/s//*

এটি প্রতিটি লাইনের শেষ অ্যাঙ্করটি খুঁজে পাবে এবং এর সাথে বিকল্পযুক্ত করবে *। আমি "বিকল্প" বলি, তবে প্রকৃতপক্ষে, এটি নিয়মিত চরিত্রের চেয়ে অ্যাঙ্কর একটি বিশেষ জিনিস হওয়ায় এটি আরও যুক্ত হয়। আরও তথ্যের জন্য, জি পাওয়ার পাওয়ার - উদাহরণগুলি দেখুন


রেজেক্সে এস // এর অর্থ কী? আমি একটি অনুরূপ কমান্ড জানি: g / / / p, (গ্রেপ)। আমি নিশ্চিত যে আপনার আদেশ কমপক্ষে কাঠামোতে আমার কাছাকাছি।
লিও লোপোল্ড হার্টজ 준영

1
S এর বিকল্প - এটি লাইন অ্যাঙ্কারের শেষটিকে নক্ষত্রের সাথে প্রতিস্থাপন করে (ভাল, এটি আসলে অ্যাঙ্কর পয়েন্ট হওয়ায় এটি প্রতিস্থাপন করে না)।
প্যাক্সিডিয়াবলো

3
হয়েছে:% s / \ N / * পান \ r / ছ

আপনার প্রথমটি অন্য কোথাও সঠিক, তবে কোনও কারণে ভিমের আলাদা আলাদা নিউলাইন হ্যান্ডলিং থাকতে হবে।


আমার সংস্করণে ভিম works n কাজ করে, তবে এটি কার্যকরভাবে লাইনে যুক্ত হয়ে একটি * দিয়ে নতুন লাইনটি প্রতিস্থাপন করে।
নাথান ফেলম্যান

1
এই কমান্ডটি ভিমের আমি চেষ্টা করেছি এমন প্রতিটি সংস্করণে সূক্ষ্মভাবে কাজ করার জন্য যাচাইকৃত। আপনি উইন্ডোজ সংস্করণ বা কিছু ব্যবহার করছেন?

1
%s/\s*$/\*/g

এটি কৌশলটি করবে এবং নিশ্চিত করবে যে শীর্ষস্থানীয় স্থানগুলি উপেক্ষা করা হবে না।

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