[vim] VIM 삽입 모드에서 문자 반복

Vim의 삽입 모드에서 문자를 반복하는 방법이 있습니까? 예를 들어, 80 개의 대시를 emacs와 같은 곳에 삽입하고 싶다고 가정하십시오.

Ctrl+U   8 0 -

VIM에서 수행하는 방법을 알고있는 유일한 방법은 반복 인수에 대해 일반 모드를 종료 한 다음 삽입 모드로 돌아가 대시를 입력 한 다음 종료하여 실제 대시를 삽입 한 다음 삽입 모드로 돌아가서 계속 진행하는 것입니다. 타자. 순서는 정말 길다 :

Esc 8 0 a - Esc a

모드를 전환하지 않는 것이 좋습니다.



답변

약간 다른 버전의 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>


답변

INSERT 모드를 한 번만 (끝에) 종료해도 괜찮 으면이 시퀀스가 ​​작동합니다.

Ctrl+o 80i- Esc

  • Ctrl+ o는 INSERT 모드를 벗어나지 않고 일반 명령을 실행하는 데 사용됩니다.
  • 80 반복
  • i 삽입
  • - 삽입하려는 캐릭터
  • Esc INSERT 모드를 종료합니다.

INSERT 모드를 떠나지 않은 다른 하나 :

Ctrl+o :norm 8ia Return


답변

Escnic Esc Esc.

Esc4iJEsc Esc를 들어 출력 JJJJ합니다.


답변

<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.


답변

단일 반복을 통해 :

Insert mode
-
Esc
80.

단일 반복에 대한 자세한 내용 : :help .


답변

당신은 또한 할 수 있습니다
Escnihello there EscEsc

여기서 n은 반복 횟수입니다.

예를 들어
Esc5ihello there EscEsc


답변

다른 많은 방법이 있지만 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>