在Vim的插入模式下有没有办法重复一个角色?例如,假设我想插入80个破折号,就像我输入的emacs:
Ctrl + U 8 0 -
我知道如何在VIM中执行此操作的唯一方法是退出重复参数的正常模式,然后返回插入模式以键入破折号,然后退出以插入实际破折号,然后返回插入模式打字打字。序列很长:
Esc 8 0 a - Esc a
不要切换进出模式会很好。
答案 0 :(得分:210)
如果您只能退出INSERT模式一次(最后),则此序列有效:
Ctrl + o 80i-
Esc
80
重复,i
要插入,-
您要插入的字符,另一个没有离开INSERT模式的人:
Ctrl + o :norm 8ia
返回
答案 1 :(得分:132)
Esc n i c < kbd> Esc Esc 。
E.g。 Esc 4 i J Esc Esc 将输出JJJJ
。
答案 2 :(得分:18)
<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.
答案 3 :(得分:17)
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>
答案 4 :(得分: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>
答案 5 :(得分:7)
你也可以这样做, Esc n i 你好 Esc Esc 的
其中, n是重复次数。
如, Esc 5i 你好 Esc Esc
答案 6 :(得分:6)
你说它会很好的&#39;留在&#39;插入&#39;模式,但在命令模式下,以下方法将避免您的第二个 ESC : -
虽然我知道这篇文章已经过时了但是错过了明显的剪切/复制和粘贴等问题似乎很遗憾。选项...
x ... cut
8 0 ...份数
p 粘贴
注意:这类似于Martin Beckett建议的方法,但是在发出该命令时会出现延迟,可能是因为它多次切换模式,此命令会立即执行。
答案 7 :(得分:5)
我很惊讶还没有人提出这个建议:
在插入模式下,使用<C-r>=repeat('-', 80)<CR>
也就是说:
repeat('-', 80)
可多次重复任何字符。
这比@romainl的答案使用了更多的击键,但根本没有离开插入模式。
答案 8 :(得分:4)
通过一次重复:
Insert mode
-
Esc
80.
有关单次重复的更多详细信息::help .
答案 9 :(得分:3)
迟到的答案,但是对于它的价值,如果你想要发送垃圾邮件,你可以使用
&#34;重复上一个命令&#34;命令:.
i &#34; Phrase&#34; 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).
当我不确切地知道我想要做多少次重复时,我发现这特别有用,但我知道我想要多长时间。基本上爆炸.
,直到我的眼睛满足。
答案 10 :(得分:2)
除了编写多次重复文本的功能外,您还可以使用&lt; C-x&gt;&lt; C-l&gt; :如果您已经有包含80个破折号的行,则写一个在新线的开始处几次短划线然后按&lt; C-x&gt;&lt; C-1&gt; 将完成以这几个短划线开始的线,这些线可能是具有80个短划线的线。我曾经以这种方式在帮助文件中写水平线(78个破折号)。
答案 11 :(得分:1)
对于这样一个简单的任务abbreviation
应该可以解决问题。将以下内容添加到.vimrc
iab <expr> -- repeat('-', 80)
从现在开始,当您键入--
后跟空格(当您处于插入模式时)时,--
将自动转换为-
80次。
通过使用函数repeat
,您可以多次重复字符串。
请注意,您可以在更新.vimrc
之前通过输入command
模式然后发出以下:iab <expr> -- repeat('-', 80)
答案 12 :(得分:1)
我执行此操作时没有使用以下步骤退出INSERT模式。
-- (insert) VISUAL --
模式) i
-
Ctrl+o
v
y
Ctrl+o
80
p
这将在一行中水平打印所有破折号。