Answers:
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
80
重复, i
插入-
您要插入的字符,另一个从未退出INSERT模式的情况:
Ctrl+o :norm 8ia
Return
<C-o>
是Ctrl
+的简写o
。
:normal
命令,可让您从命令提示符下发出它们。有时候挺有用的。
Escnic Esc Esc。
例如Esc4iJEsc Esc将输出JJJJ
。
你也可以 Escnihello there EscEsc
其中,n是重复次数。
例如, Esc5ihello there EscEsc
Esc
之后必须按两次。感谢@prashant
还有许多其他方法,但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>
您说停留在“插入”模式将是“不错的”,但是在命令模式下,以下方法将避免您的第二个ESC:-
虽然我知道这篇文章很旧,但是错过明显的“剪切/复制和粘贴”选项似乎很可惜...
x ...切
80 ...复印数量
p 糊
注意:这类似于Martin Beckett建议的方法,但是发出该命令时会出现延迟,可能是因为它多次切换了模式,所以该命令会立即执行。
v
y
进入视觉模式,然后拉动,然后80
p
粘贴80次。我错过了什么,还是忘记了一步?
对于这样一个简单的任务,abbreviation
应该可以解决。将以下内容添加到您的.vimrc
iab <expr> -- repeat('-', 80)
从现在开始,当您输入--
后跟一个空格(处于插入模式时)时,--
将会自动转换为-
80次。
通过使用功能 repeat
您可以根据需要多次重复字符串。
请注意,您可以在.vimrc
进入command
模式之前进行更新,然后发出以下命令进行测试:iab <expr> -- repeat('-', 80)