ভিআইএম সন্নিবেশ মোডে অক্ষর পুনরাবৃত্তি করা হচ্ছে


141

ভিমের সন্নিবেশ মোডে থাকাকালীন কি কোনও চরিত্র পুনরাবৃত্তি করার কোনও উপায় আছে? উদাহরণস্বরূপ, বলুন যে আমি 80 টি ড্যাশ সন্নিবেশ করতে চাই, ইমাসের মতো আমি টাইপ করব:

Ctrl+ +U   8 0 -

ভিআইএম-এ এটি কীভাবে করা যায় তার একমাত্র উপায় হ'ল পুনরাবৃত্তি যুক্তিটির জন্য স্বাভাবিক মোড থেকে প্রস্থান করা, তারপরে ড্যাশটি টাইপ করতে সন্নিবেশ মোডে ফিরে যান, তারপরে প্রকৃত ড্যাশগুলি সন্নিবেশ করানোর জন্য প্রস্থান করুন এবং তারপরে চালিয়ে যাওয়ার জন্য সন্নিবেশ মোডে ফিরে যান on টাইপিং। ক্রমটি আসলেই দীর্ঘ:

Esc 8 0 a - Esc a

মোডগুলি স্যুইচ এবং না করা ভাল nice

উত্তর:


20

ইয়েলেক্সের সমাধানের সামান্য ভিন্ন সংস্করণ:

function! Repeat()
    let times = input("Count: ")
    let char  = input("Char: ")
    exe ":normal a" . repeat(char, times)
endfunction

imap <C-u> <C-o>:call Repeat()<cr>

259

আপনি যদি একবার INSERT মোড রেখে ঠিক থাকেন (শেষে), এই ক্রমটি কাজ করে:

Ctrl+ +o 80i- Esc

  • Ctrl+ +o সন্নিবেশ মোড গিয়েই স্বাভাবিক কমান্ড ইস্যু করতে ব্যবহার করা হয়,
  • 80 পুনরাবৃত্তি,
  • i sertোকাতে,
  • - আপনি যে চরিত্রটি sertোকাতে চান,
  • Esc INSERT মোড ছেড়ে যেতে।

ইনসার্ট মোড ছাড়ার পরে আর একটি না:

Ctrl+ +o :norm 8ia Return


6
আপনার উত্তর এবং ওপির উত্তরটি কেবল আমার পক্ষে কাজ করে।
twblamer

34
"<কো> INSERT মোড না রেখেই সাধারণ কমান্ড জারি করতে ব্যবহৃত হয়" এই পুরস্কারটি আমার-বিশ্বাস করতে পারে না-জানি না-জানিনা!
স্টেলেডোগ

11
<C-o>শর্টহ্যান্ড Ctrl+ এর জন্য o
শন লুটিন

3
এর রয়েছে :normalকমান্ড যা আপনি তাদের কম্যান্ড প্রম্প্ট থেকে জারি করতে দেয়। মাঝেমধ্যে বেশ কার্যকর।
মার্ক রিড

157

Escnic Esc Esc

যেমন Esc4iJEsc Escআউটপুট হবে JJJJ


3
দুর্ভাগ্যক্রমে এটি আমার ভিমে কাজ করে না যদি আপনি স্বাভাবিক মোডে ফিরে না যান।
চতুটু

5
তবে এটি "ভিম ওয়ে" এর সেরা উত্তর।
Drasill

1
আমি সর্বদা নিজেকে সন্নিবেশ মোডে ফিরে যেতে দেখি যখন আমি টিপছি, সুতরাং আমি কেবল অক্ষর সন্নিবেশ করব। আমি এটি কীভাবে কাজ করব?
সেভেরো রাজ

1
এই কমান্ড ওপি চেয়েছিলেন সঠিক ক্রম এড়াতে
কেনি এভিট

1
এটি যে প্রশ্ন জিজ্ঞাসা করা হয়েছিল তার উত্তর নাও হতে পারে, তবে এটি করার পক্ষে এটিই উপায় এবং এটি যে প্রশ্নের উত্তর আমি খুঁজছিলাম তার উত্তর।
মাইকেল লিওনার্ড

20
<ESC> 
<the number of times you want to repeat>
i 
<the char you want to repeat> 
<ESC>

for example: <ESC>12ia<ESC> will insert 12 a's.

8
এই কমান্ড ওপি চেয়েছিলেন সঠিক ক্রম এড়াতে
কেনি এভিট

13

একক পুনরাবৃত্তি মাধ্যমে:

Insert mode
-
Esc
80.

একক পুনরাবৃত্তি সম্পর্কে আরও বিশদ: :help .


ধন্যবাদ তবে এই সমাধানটির জন্য আপনাকে সন্নিবেশ মোড থেকে বাইরে যেতে হবে।
চতুটু

8

আপনিও করতে পারেন, Escnihello there EscEsc

যেখানে, এন পুনরাবৃত্তির সংখ্যা।

যেমন, Esc5ihello there EscEsc



এটি হুবহু সদৃশ নয়। অন্যটি আমার পক্ষে কাজ করেনি। এখানে আমি বুঝতে পেরেছিলাম যে Escএরপরে আমাকে দু'বার চাপতে হবে । ধন্যবাদ @ প্রশান্ত
শ্রীধর সারনোবাত

7

অন্যান্য অনেকগুলি উপায় আছে তবে আফাইক আপনি যেটি বর্ণনা করেন তা হ'ল সংক্ষিপ্ততম। ইন তেজ আপনি বেশিরভাগ কমান্ড মোডে আপনার সময় ব্যয় করতে অনুমিত হয় যাতে মাত্র 3 কীস্ট্রোকগুলি + + পুনরাবৃত্তি সংখ্যা (80i-) হতে হবে।

তবে, আপনি যদি দেখতে পান যে আপনি খুব ঘন ঘন এই পুনরাবৃত্তি জিনিসটি ব্যবহার করেন তবে আপনি নিজেকে সে জন্য একটি ফাংশন বা ম্যাক্রো করতে পারেন; হয়তো এর মতো কিছু:

:function Repeat(char)
: let counter = input("How many times?: ")
: call feedkeys("i")
: call feedkeys(repeat(a:char,counter))
:endfunction
:imap <C-U> <ESC>h"ryl :call Repeat(@r)<CR>

এটি আমার পক্ষে কার্যকর হয়নি তবে উত্তরের জন্য ধন্যবাদ। আমার ভিম প্রোগ্রামিং ল্যাঙ্গুয়েজ সম্পর্কে জ্ঞান কেন তা বোঝার পক্ষে যথেষ্ট নয়।
চতুটু

6

আপনি বলেছিলেন যে 'সন্নিবেশ' মোডে থাকতে ভাল লাগবে, তবে কমান্ড মোডে নিম্নলিখিত পদ্ধতিটি আপনার ২ য় এড়াতে পারে ESC : -

যদিও আমি জানি এই পোস্টটি পুরানো, এটি 'কাট / অনুলিপি এবং আটকান' অপশনটি স্পষ্ট করে দেওয়া লজ্জার বলে মনে হচ্ছে ...

x ... কাটা

80 ...কপির সংখ্যা

p আটকে দিন

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


1
আমাকে v yভিজ্যুয়াল মোডে প্রবেশ করতে, তারপরে ইয়ঙ্ক, তারপরে 80 pএটি 80 বার পেস্ট করার জন্য ব্যবহার করতে হয়েছিল । আমি কি কিছু মিস করছি, বা আপনি একটি পদক্ষেপ ভুলে গেছেন?
আলেকজান্দ্রবার্ড

ভাল স্পটেড, আমার কাটাতে 'এক্স' ব্যবহার করা উচিত, তারপরে পেস্ট করুন। ধন্যবাদ আমি আমার উত্তর সংশোধন করেছি।
ইনয়োকা

1
দুর্দান্ত যেহেতু এটি সাধারণত পুনরাবৃত্ত পদ্ধতির চেয়ে দ্রুত।
সহায়ক

3

দেরিতে উত্তর তবে এর মূল্য কী, আপনি যদি এটি স্প্যাম করতে চান তবে আপনি "পুনরাবৃত্তি শেষ কমান্ড" কমান্ডটি ব্যবহার করতে পারেন: .

i"বাক্যাংশ" Esc -i to insert, enter phrase/character, esc to go normal mode

. - Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command).

আমি এটি বিশেষভাবে দরকারী মনে করি যখন আমি ঠিক কতটা পুনরাবৃত্তি করতে চাই তা জানি না তবে আমি এটি কতটা দীর্ঘ হতে চাই তা দৃষ্টিভঙ্গিতে জানি। .আমার চোখ সন্তুষ্ট না হওয়া পর্যন্ত মূলত ব্লাস্ট করুন ।


3

আমি অবাক হয়েছি এখনও কেউ এর পরামর্শ দেয়নি:

সন্নিবেশ মোডে, ব্যবহার করুন <C-r>=repeat('-', 80)<CR>

এটাই:

  • প্রেস Ctrl-r=
  • ফলাফল প্রম্পটে, প্রবেশ করান repeat('-', 80)
  • প্রেস Enter

যে কোনও চরিত্রকে যে কোনও সংখ্যক বার পুনরাবৃত্তি করার জন্য কাজ করে।

এটি @ রোমেনেলের উত্তরের চেয়ে বেশি কীস্ট্রোক ব্যবহার করে তবে সন্নিবেশ মোডটি একেবারেই ছাড়বে না।


2

ফাংশনটি লেখার পাশাপাশি পাঠ্যের একাধিকবার পুনরাবৃত্তি হবে, আপনি ব্যবহার করতে পারেন <C-x><C-l>: আপনার যদি ইতিমধ্যে ৮০ টি ড্যাশ যুক্ত লাইন থাকে তবে নতুন লাইনের শুরুতে কয়েকটি ড্যাশ লিখে এবং তারপরে টিপলে <C-x><C-l>লাইনগুলি এই কয়েকটি ড্যাশ দিয়ে শুরু হবে যা সম্পূর্ণ হবে সম্ভবত 80 টি ড্যাশযুক্ত লাইন। আমি সাহায্যের ফাইলগুলিতে এমনভাবে অনুভূমিক রেখাগুলি (78 টি ড্যাশ) লিখতাম।


1

যেমন একটি সহজ কাজ abbreviationকৌতুক করা উচিত। নিম্নলিখিতটি আপনারটিতে যুক্ত করুন.vimrc

iab <expr> -- repeat('-', 80)

এবং এখন থেকে, আপনি যখন --কোনও স্থান অনুসরণ করে টাইপ করবেন (আপনি যখন সন্নিবেশ মোডে --থাকবেন ) তখন স্বয়ংক্রিয়ভাবে রূপান্তরিত হবে- 80 বারে ।

ফাংশন ব্যবহার করে repeat আপনি যতবার চান স্ট্রিংটির পুনরাবৃত্তি করতে সক্ষম হবেন।

নোট করুন যে মোডে .vimrcপ্রবেশ করে commandআপডেটটি দেওয়ার আগে নিম্নলিখিতটি জারি করে আপনি এটি পরীক্ষা করতে পারেন:iab <expr> -- repeat('-', 80)


1

আমি নীচের পদক্ষেপগুলি ব্যবহার করে INSERT মোড থেকে বেরিয়ে না এসে এটি করেছি।

  1. INSERT মোড সক্ষম করুন।
  2. টাইপ করুন একটি ড্যাশ "-"।
  3. Ctrl + O
  4. ছোট হাতের 'ভি' ( -- (insert) VISUAL --মোডে প্রবেশ করতে )
  5. ছোট হাতের 'y' (অনুলিপি করতে)
  6. Ctrl + O
  7. 80 টাইপ করুন
  8. তারপরে, ছোট হাতের 'পি' (পেস্টের জন্য) অনুসরণ করুন।

i - Ctrl+o v y Ctrl+o 80 p

এটি সমস্ত ড্যাশগুলি একক লাইনে অনুভূমিকভাবে মুদ্রণ করবে।

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