VIM इन्सर्ट मोड में दोहराए जाने वाले अक्षर


141

क्या विम के इंसर्ट मोड में किसी कैरेक्टर को दोहराने का कोई तरीका है? उदाहरण के लिए, मान लीजिए कि मैं 80 डैश सम्मिलित करना चाहूंगा, कुछ इमैकस जैसे मैं टाइप करूंगा:

Ctrl+U   8 0 -

एकमात्र तरीका मुझे पता है कि वीआईएम में इसे कैसे करना है रिपीट तर्क के लिए सामान्य मोड से बाहर निकलें, फिर डैश टाइप करने के लिए इंसर्ट मोड में जाएं, फिर वास्तविक डैश सम्मिलित करने के लिए बाहर निकलें, और फिर ले जाने के लिए इन्सर्ट मोड में वापस जाएं। टाइपिंग। अनुक्रम वास्तव में लंबा है:

Esc 8 0 a - Esc a

मोड में और बाहर स्विच न करना अच्छा होगा।

जवाबों:


20

Eelvex के समाधान का थोड़ा अलग संस्करण:

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का उपयोग INSERT मोड को छोड़कर सामान्य कमांड जारी करने के लिए किया जाता है,
  • 80 पुनरावृत्ति,
  • i अन्दर डालना,
  • - वह चरित्र जिसे आप सम्मिलित करना चाहते हैं,
  • Esc INSERT मोड को छोड़ने के लिए।

कभी भी इंसर्ट मोड से बाहर निकलने के बिना एक और:

Ctrl+o :norm 8ia Return


6
आपका जवाब और ओपी का जवाब केवल वही हैं जो मेरे लिए काम करते हैं।
21

34
"<Co> का उपयोग INSERT मोड को छोड़े बिना सामान्य कमांड जारी करने के लिए किया जाता है" मेरा विश्वास नहीं करता है-मैं-कभी नहीं-के बारे में-यह पुरस्कार!
13

11
<C-o>के लिए आशुलिपि है Ctrl+ o
शॉन लुटिन

3
वहाँ भी :normalकमांड है जो आपको कमांड प्रॉम्प्ट से उन्हें जारी करने देता है। कभी-कभी काफी उपयोगी।
मार्क रीड

157

Escnic Esc Esc

जैसे Esc4iJEsc Escआउटपुट देगा JJJJ


3
जब तक आप सामान्य मोड में वापस नहीं आते, दुर्भाग्य से यह मेरी विम पर काम नहीं करता है।
चुतु

5
लेकिन यह "विम तरीके" में सबसे अच्छा जवाब है।
13

1
मैं हमेशा अपने आप को मोड में डालने के लिए वापस जाता हूं जब मैं i दबाता हूं, तो मैं केवल CHARACTER डालूंगा। मैं यह कैसे काम करूँ?
गंभीर राज

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

जहां, n दोहराव की संख्या है।

जैसे, Esc5ihello there EscEsc



यह एक सटीक डुप्लिकेट नहीं है। दूसरे ने मेरे लिए काम नहीं किया। यहां मुझे एहसास हुआ कि मुझे बाद में Escदो बार प्रेस करना होगा । साभार @prashant
श्रीधर सरनोबत

7

कई अन्य तरीके हैं लेकिन AFAIK जिस पर आप वर्णन करते हैं वह सबसे छोटा है। में vim आप ज्यादातर आदेश मोड में अपना समय खर्च करने वाले हैं ताकि सिर्फ 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

आपने कहा कि 'इन्सर्ट' मोड में बने रहना 'अच्छा' होगा, हालाँकि कमांड मोड में निम्न विधि आपके 2 से बचेंगी ESC: -

जबकि मुझे पता है कि यह पोस्ट पुरानी है, यह स्पष्ट 'कट / कॉपी और पेस्ट' विकल्प को याद करने के लिए शर्म की बात है ...

x ...कट गया

80 ...प्रतियों की संख्या

p पेस्ट करें

नोट: यह मार्टिन बेकेट द्वारा सुझाई गई विधि के समान है, हालांकि मुझे उस कमांड को जारी करते समय देरी हो जाती है, शायद क्योंकि यह कई बार मोड स्विच करता है, यह कमांड तुरंत निष्पादित करता है।


1
मुझे v yदृश्य मोड में प्रवेश करने के लिए उपयोग करना पड़ा , फिर यान, फिर 80 pइसे 80 बार चिपकाने के लिए। क्या मुझे कुछ याद आ रहा है, या आप एक कदम भूल गए?
एलेक्सेंडरबर्ड

अच्छी तरह से देखा जाता है, मुझे काटने के लिए 'x' का उपयोग करना चाहिए, फिर पेस्ट करना चाहिए। धन्यवाद, मैंने अपने उत्तर में संशोधन किया है।
इयोका

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

किसी भी वर्ण को किसी भी समय दोहराने के लिए काम करता है।

यह @ romainl के उत्तर की तुलना में अधिक कीस्ट्रोक्स का उपयोग करता है, लेकिन इन्सर्ट मोड बिल्कुल नहीं छोड़ता।


2

कई बार दोहराए जाने वाले फ़ंक्शन को लिखने के अलावा, आप उपयोग कर सकते हैं <C-x><C-l>: यदि आपके पास पहले से ही लाइन है जिसमें 80 डैश हैं, तो नई लाइन की शुरुआत में कुछ डैश लिख रहे हैं और फिर दबाने <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. लोअरकेस 'v' ( -- (insert) VISUAL --मोड में प्रवेश करने के लिए )
  5. लोअरकेस 'y' (कॉपी करने के लिए)
  6. Ctrl + O
  7. 80 टाइप करें
  8. फिर, लोअरकेस 'पी' (पेस्ट के लिए) के बाद।

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

यह एक ही लाइन में क्षैतिज रूप से सभी डैश को प्रिंट करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.