Vi / Vim এ মাল্টি-লাইন নির্বাচনের শুরুতে কীভাবে পাঠ্য সন্নিবেশ করা যায়


423

ইন তেজ , কিভাবে আমি একটি নির্বাচন প্রতিটি লাইনের শুরুতে অক্ষর সন্নিবেশ না?

উদাহরণস্বরূপ, আমি //প্রতিটি লাইনের শুরুতে প্রিপেন্ড করে আমার ভাষার মন্তব্য সিস্টেমটি ব্লক মতামতকে ব্লক করার অনুমতি দেয় না এমন ধারণা করে কোডের একটি ব্লক মন্তব্য করতে চাই /* */। আমি এই কিভাবে করব?

উত্তর:


748
  • প্রেস Escপ্রবেশ করতে 'কম্যান্ড মোড
  • ভিজ্যুয়াল ব্লক মোডে প্রবেশ করতে Ctrl+ ব্যবহার Vকরুন
  • আপনি যে লাইনে মন্তব্য করতে চান তাতে পাঠ্যের কলামগুলি নির্বাচন করুন Up/ সরান Down
  • তারপরে হিট Shift+ করুন iএবং আপনি যে পাঠ্যটি সন্নিবেশ করতে চান তা টাইপ করুন।
  • তারপরে হিট করুন Esc, 1 সেকেন্ড অপেক্ষা করুন এবং sertedোকানো পাঠ্য প্রতিটি লাইনে উপস্থিত হবে।

আরও তথ্য এবং পড়ার জন্য, ভিম টিপস উইকিতে " একাধিক লাইনে পাঠ্য সন্নিবেশ করা " দেখুন।


6
এটির সাথে একমাত্র বামার এটি প্রদর্শিত হয় যে সিটিটিএল + ভি জিভিআইএম-এ ওভাররাইড করা হয়েছে।
জর্ডান পারমার

14
আমার জন্য নয় (লিনাক্সে) এটি নয়
পিক্সেলবিট

23
আপনি gVim এ প্রতিস্থাপন হিসাবে Ctrl-Q ব্যবহার করতে পারেন (যেমন: Ctrl-V ব্যাখ্যা করুন) তবে আপনাকে তীরচিহ্নের পরিবর্তে এই মোডে নেভিগেট করতে hjkl ব্যবহার করতে হবে
গ্যারেথ

9
আপনার সিটিআরএল-ভি যদি উইন্ডোজ জিভিআইমে ওভাররাইড করা হয় তবে আপনার এমএসউইন.ভিম সহ বন্ধ করতে গ্লোবাল ভিআইআরসিডি সম্পাদনা করা উচিত।
ধুসর 21

18
কোনও ধারণা কেন এসকে চাপ দেওয়ার পরে এটি কিছু করবে না? আমি একশ লাইনেরও কম কিছু হওয়ার জন্য 10 সেকেন্ডের মতো অপেক্ষা করেছি - কিছু মনে করবেন না, আমি চাপ দিচ্ছি Shift + vনা CTRL + v। @ vkaul11 সম্ভবত আপনি যা করতে চেয়েছিলেন একই জিনিস
টেক

186

এটি প্রতিটি লাইনের শুরুটিকে "//" দিয়ে প্রতিস্থাপন করে :

:%s!^!//!

এটি প্রতিটি নির্বাচিত লাইনের সূচনা প্রতিস্থাপন করে ( নির্বাচন করতে ভিজ্যুয়াল মোড ব্যবহার করুন) "//" দিয়ে:

:'<,'>s!^!//!

নোট যে gv(স্বাভাবিক মোডে) গত চাক্ষুষ নির্বাচন পুনরুদ্ধার, এই সময়ে সময়ে উপকারে আসে।


3
ধন্যবাদ! মোট জ্ঞান তোলে। এবং পাঠ্যটি সরিয়ে ফেলা নিম্নরূপ: '<,'> গুলি! ^ // !!
জর্ডান পারমার

4
উপরের উত্তরে বিস্মৃত চিহ্নগুলির অর্থ কী? (:% s! ^! //!)
হেনরিক কে

19
@ এইচকেকে, সাধারণত সন্ধান এবং প্রতিস্থাপন কমান্ডের জন্য একটি ফরোয়ার্ড স্ল্যাশ অক্ষর / একটি ডিলিমিটার হিসাবে ব্যবহার করে। এই ক্ষেত্রে আমরা অনুসন্ধানের অংশ হিসাবে একটি ফরোয়ার্ড স্ল্যাশ সন্নিবেশ করছি এবং প্রতিস্থাপন করছি সুতরাং আমরা একটি বিকল্প ডেলিমিটার ব্যবহার করি, অর্থ বিস্মরণ বর্ণন!
সাইবার-সন্ন্যাসী

+1 এটি VsVim এ কাজ করে যেখানে (Ctrl + V) (শিফট + আই) ইস্ক হয় না।
শেঠ রেনো

4
+1 টি, (আমি ব্যবহার করছিলেন এখানে কোন ধারণা আপনি Regex বিভেদক হিসাবে অন্য কিছু ব্যবহার করতে পারে ছিল /এবং অব্যাহতি থাকার //মধ্যে :s/^/\/\/লেখার পরিবর্তে :s!^!//)
Hashbrown

83

অনুসন্ধান এবং প্রতিস্থাপনের জন্য সাধারণ প্যাটার্নটি হ'ল:

:s/search/replace/

বর্তমান লাইনের জন্য 'প্রতিস্থাপন' দিয়ে 'অনুসন্ধান' এর প্রথম ঘটনাকে প্রতিস্থাপন করে

:s/search/replace/g

বর্তমান লাইনের জন্য 'প্রতিস্থাপন' দিয়ে 'অনুসন্ধান' এর সমস্ত উপস্থিতি প্রতিস্থাপন করে, 'গ্লোবাল' এর জন্য 'জি' সংক্ষিপ্ত

এই কমান্ডটি কেবলমাত্র বর্তমান লাইনের জন্য 'অনুসন্ধান' এর প্রতিটি ঘটনাকে 'প্রতিস্থাপন' দিয়ে প্রতিস্থাপন করবে। % পুরো ফাইলটি অনুসন্ধান করতে ব্যবহৃত হয়। প্রতিটি প্রতিস্থাপন নিশ্চিত করার জন্য ইন্টারেক্টিভভাবে একটি 'সি' যুক্ত করুন:

:%s/search/replace/c

ইন্টারেক্টিভ নিশ্চিত করুন পুরো ফাইলটির জন্য 'অনুসন্ধান' এর পরিবর্তে 'প্রতিস্থাপন' করুন

% অক্ষরের পরিবর্তে আপনি একটি লাইন নম্বর পরিসর ব্যবহার করতে পারেন (নোটের শুরু করার জন্য 'character' অক্ষরটি একটি বিশেষ অনুসন্ধান অক্ষর) :

:14,20s/^/#/

14-20 লাইনের শুরুতে একটি '#' অক্ষর সন্নিবেশ করান

আপনি যদি আরও একটি মন্তব্য চরিত্র (যেমন //) ব্যবহার করতে চান তবে আপনার আদেশটি ডিলিমেটারটি পরিবর্তন করুন:

:14,20s!^!//!

14-20 লাইনের শুরুতে একটি '//' অক্ষর ক্রম সন্নিবেশ করান

অথবা আপনি সর্বদা কেবল // অক্ষরগুলি এড়াতে পারবেন:

:14,20s/^/\/\//

14-20 লাইনের শুরুতে একটি '//' অক্ষর ক্রম সন্নিবেশ করান

আপনি যদি আপনার সম্পাদকটিতে লাইন নম্বর দেখতে না পান তবে কেবল নিম্নরূপটি টাইপ করুন

:set nu

শুরুটি সরাতে #: পরিবর্তে: 14,20s / # / ^ /, আপনার ব্যবহার করা উচিত: 14,20s / # //
সিএনএইচ

1
@ সিএনএএইচ আমি মনে করি #এটি লাইনের অন্যটিও প্রতিস্থাপন করবে । ^#পরিবর্তে আপনার ব্যবহার করা উচিত ।
ankush981

বেসিকগুলি ব্যাখ্যা করার জন্য ধন্যবাদ। কেন কিছু ঘটে তা জেনে রাখা ভাল।
didierCH

38

নতুন উপায় যা নতুনদের জন্য সহজ হতে পারে:

 some█
 code
 here

প্রথম লাইনে কার্সারটি রাখুন, যেমন

gg

এবং সন্নিবেশ মোডে প্রবেশ করতে এবং আপনার পাঠ্য যুক্ত করতে নিম্নলিখিত টাইপ করুন:

I / / Space

 // █some
 code
 here

Escকমান্ড মোডে ফিরে আসতে এবং ডিগ্রাফটি ব্যবহার করতে টিপুন :

j . j .

 // some
 // code
 //█here

jএকটি মোশন কমানোর জন্য একটি মোশন কমান্ড এবং .আপনার করা শেষ সম্পাদনা আদেশটি পুনরাবৃত্তি করে।


3
সত্যিই সহজ :)। আপনার যদি সমস্যা হয় তবে এটি হতে পারে কারণ আপনি |মূলধনের পরিবর্তে একটি বার (আপনার with সহ অন্যান্য প্রতীক) টাইপ করছেন I। আমি ভেবেছিলাম |প্রথমে এটি ছিল ।
কোকেড

1
যদি আমি "5" করি এটি একই লাইন থেকে 5 অক্ষর মুছে দেয়। আমি কীভাবে এটি প্রতিটি লাইন থেকে একবারে 5 টি অক্ষর মুছতে পারি?
রাহুল প্রসাদ

1
@ রাহুলপ্রসাদ ধরা যাক আপনার 25 টি লাইন রয়েছে, তারপরে প্রথম লাইনের সামনের দিকে শুরু করে কেবল 5xj একটি রেজিস্টারে রেকর্ড করুন এবং 24 বার নিবন্ধটি খেলুন, উদাহরণস্বরূপ: qa5xjq25 @ a তবে আপনি যদি এটি প্রকৃত প্রশ্ন হিসাবে পোস্ট করেন তবে ভাল হবে যদি এটি ইতিমধ্যে বিদ্যমান না থাকে ...
নাইনগ্রিড

26

এবং আরও একটি উপায়:

  • একটি লাইনের শুরুতে সরান
  • ভিজ্যুয়াল ব্লক মোড প্রবেশ করুন ( CTRL-v )
  • আপনি যে লাইনগুলি চান তা নির্বাচন করুন (সাথে উপরে / নিচে সরানো j/ kঅথবা [লাইন] এর সাথে একটি লাইনে ঝাঁপুনG )
  • প্রেস I (এটি মূলধন আমি)
  • মন্তব্য অক্ষর টাইপ করুন
  • প্রেস ESC

20

এটি #প্রতিটি লাইনের শুরুতে যুক্ত করে:

:%s/^/#/

এবং স্ক্রিপ্টগুলিতে সঠিকভাবে মন্তব্য করার অভাব সম্পর্কে লোকেরা অভিযোগ করা বন্ধ করবে।


2
আপনি যদি কেবলমাত্র নির্বাচিত (বা কয়েকটি) লাইনে # যুক্ত করতে চান
রাহুল প্রসাদ

15

আপনি যদি এটি সম্পর্কে সুপার অভিনবতা পেতে চান, এটি আপনার .vimrc এ রাখুন:

vmap \c :s!^!//!<CR>
vmap \u :s!^//!!<CR>

তারপর, যখনই চাক্ষুষ মোডে, আপনি মারতে পারেন \cকরার ব্লক omment এবং \uকরতে তোমার দর্শন লগ করা এটা ncomment। অবশ্যই, আপনি এই শর্টকাট কী-স্ট্রোককে যে কোনও কিছুতে পরিবর্তন করতে পারেন।


উত্সাহিত কারণ এটি নতুন কিছু প্রবর্তন করেছে - vmap!
ankush981

11

তবুও অন্য উপায়:

:'<,'>g/^/norm I//

/^/প্রতিটি লাইনের সাথে মিলে যাওয়ার জন্য এটি একটি ডামি প্যাটার্ন। normআপনাকে অনুসরণ করবে এমন নরমাল-মোড কমান্ডগুলি চালাতে দেয়। I//লাইনের শুরুতে কার্সারটি জাম্প করার সময় সন্নিবেশ-মোডে প্রবেশ করতে বলেছে, তারপরে নীচের পাঠ্যটি (দুটি স্ল্যাশ) sertোকান।

:g একাধিক লাইনে জটিল কিছু করার জন্য প্রায়শই কার্যকর, যেখানে আপনি একাধিক মোডের মধ্যে ঝাঁপিয়ে পড়তে, লাইনগুলি মুছতে বা যুক্ত করতে, কার্সারটি চারপাশে সরাতে, ম্যাক্রোগুলির একগুচ্ছ চালাতে চান etc. একটি প্যাটার্ন মেলে।


1
আসলে: g কমান্ডের প্রয়োজন নেই। এটি করবে:: '<,'> আদর্শ আমি //
সাইবার অলিভিয়র

1
এবং: গুলি এই ক্ষেত্রে ব্যবহার করা আরও ভাল।
ধুসর 21

এটি সবচেয়ে দরকারী উত্তর।
শান্তিপূর্ণ

3

কোড ব্লক মন্তব্য করার জন্য, আমি NERD Commenter প্লাগইন পছন্দ করি ।

কিছু পাঠ্য নির্বাচন করুন:

Shift-V
...select the lines of text you want to comment....

মন্তব্য:

,cc

Uncomment:

,cu

অথবা কেবল একটি লাইন বা ব্লকের মন্তব্যে স্থিতি টোগল করুন:

,c<space>

2

আমি EnhCommentify সুপারিশ করতে পারেন প্লাগইন ।

যেমন। আপনার vimrc এ এটি রাখুন:

let maplocalleader=','
vmap <silent> <LocalLeader>c <Plug>VisualTraditional
nmap <silent> <LocalLeader>c <Plug>Traditional
let g:EnhCommentifyBindInInsert = 'No'
let g:EnhCommentifyMultiPartBlocks = 'Yes'
let g:EnhCommentifyPretty = 'Yes'
let g:EnhCommentifyRespectIndent = 'Yes'
let g:EnhCommentifyUseBlockIndent = 'Yes'

তারপরে আপনি '(সি') দিয়ে (নির্বাচিত) লাইনগুলিকে মন্তব্য / অশান্তি দিতে পারেন


3
এছাড়াও আপনি Nerd না মন্তব্যকারী ব্যবহার করতে পারেন vim.org/scripts/script.php?script_id=1218
নাথন Fellman

1

ভিজ্যুয়াল ব্লক হিসাবে মন্তব্য করতে এলাকা চিহ্নিত করুন ( <C-V)

এবং কর c#<ESC>p

  1. cএটি "#" এ ঝুলিয়ে দিন
  2. এটি পিছনে রাখুন

আপনি যদি এটি প্রায়শই \qকরেন তবে আপনার .vimrc এ একটি শর্ট কাট (উদাহরণ ) সংজ্ঞায়িত করুন

:vmap \q c#<ESC>p

1

যদি কারও একাধিক-লাইন-নির্বাচন আসলে অনুচ্ছেদ হয় তবে নিজে লাইনগুলি নির্বাচন করার দরকার নেই। ভিম আপনার পক্ষে এটি করতে পারে:

  1. vip: নির্বাচন করুন এবং পুরো অনুচ্ছেদ চিহ্নিত করুন
  2. shift-i: লাইনের শুরুতে পাঠ্য সন্নিবেশ করান
  3. escape: সন্নিবেশ মোড ছেড়ে দিন / সাধারণ মোডে প্রবেশ করুন [লাইন সূচনাগুলি এখনও নির্বাচিত]
  4. escape: অনির্বাচিত লাইনের শুরু

0

প্রতিটি লাইনের শুরুতে "ABC" সন্নিবেশ করতে:

1) কমান্ড মোডে যান

2):% আদর্শ আমি এবিসি


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