在VIM插入模式下重复字符

在Vim的插入模式下有没有重复一个字符的方法? 例如,说我想插入80破折号,像emacs的东西,我会input:

Ctrl + U 8 0 -

我知道在VIM中如何做的唯一方法是退出重复参数的正常模式,然后返回到插入模式键入短划线,然后退出插入实际的短划线,然后返回到插入模式进行打字。 序列是非常长的:

Esc 8 0 a - Esc a

不用切换模式就可以了。

Eelvex解决scheme略有不同的版本:

function! Repeat() let times = input("Count: ") let char = input("Char: ") exe ":normal a" . repeat(char, times) endfunction imap <Cu> <Co>:call Repeat()<cr> 

如果只有一次(在最后)退出INSERT模式,那么这个序列就起作用了:

 <Co>80i-<Esc> 
  • <Co>用于在不离开INSERT模式的情况下发出正常的命令,
  • 80重复,
  • i插入,
  • -你想插入的字符,
  • 退出INSERT模式。

另一个没有离开INSERT模式的EVER:

 <Co>:norm 8ia<CR> 

Esc n i c Esc

例如Esc 4 i J 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. 

还有很多其他的方法,但是AFAIK描述的是最短的一个。 在vim中,你大部分都应该把时间花在命令模式上,这样只需要3次按键+重复次数(80i-)。

但是,如果你发现你经常使用这个重复的东西,你可以使自己成为一个函数或macros; 也许是这样的:

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

你说这将是'很好'留在'插入'模式,但是在命令模式下,以下方法可以避免你的第二个ESC : –

虽然我知道这个post是旧的,但错过显而易见的“剪切/复制和粘贴”选项似乎是一种遗憾。

切…

8 0 …份数

p粘贴

注意:这与Martin Beckett提出的方法类似,但是当发出这个命令时,我得到了延迟,也许是因为它多次切换模式,这个命令立即执行。

你也可以, Esc n我有 你好 Esc Esc

其中,n是重复次数。

例如, Esc 5i 你好那里 Esc Esc

迟到的答案,但为了什么是值得的,如果你想发送垃圾邮件,你可以使用“重复最后的命令”命令: .

“短语” Esci 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). Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command).

当我不清楚我想要做多less次重复时,我发现这个特别有用,但是直观地知道我想要多久。 基本上爆炸了. 直到我的眼睛满足。

除了可以多次重复文本的函数之外,还可以使用<Cx> <Cl> :如果已经有包含80个破折号的行,在新行开始处写一些破折号,然后按<Cx> <Cl >将完成以这些短划线开始的行,这将可能是与80破折号的行。 我曾经以这种方式在帮助文件中写水平线(78破折号)。