如何在Vim中重复任何命令,例如Emacs中的“C-x z”?

66
在Vim中,是否有一种方法可以重复执行最后一条命令,而不管它是不是编辑命令,也不需要预先记录宏?
例如,我输入了“:bn”,想再次执行它(因为它是错误的文件)。显然按“.”键不能做到这一点。或者我正在执行“gE”,想要重复执行该命令(只需按一个按键,因为显然输入“gE”有点痛苦)。
可能有一些插件?类似于这个问题
(更酷的是,可以将多个命令追溯地绑定到一个宏上,这样就可以输入“5qa@a”之类的东西来重复执行最近的5个命令......)
5个回答

96

如果要重复执行命令行命令,请尝试使用@:,如果要重复执行正常/插入模式命令,请尝试使用.

如果想要快捷键来实现同样的效果,请在您的.vimrc文件中添加以下映射:

:noremap <C-P> @:<CR> - 这将把Ctrl + P映射到上一个命令行命令。您可以映射任何其他组合键。


gE 到底是做什么的?我尝试使用 dw 删除一个单词,然后按 . 删除另一个单词。 - Ravikiran
这是一个动作命令,“向后到单词结尾”,是E的反向。 - johv
5
ctr+P 用于代码自动完成,因此您可能不希望将其重新映射为该功能。 - Ferdinando Randisi
6
Ctrl+P也被映射为众所周知的插件CtrlP。 - Patrick Bassut
自动完成映射通常是插入模式映射(imap),因此如果您只想在正常模式下启用映射,则可以使用nmap。 - Lie Ryan
显示剩余2条评论

15

:help repeating 将提供典型的重复命令(例如 ., @: 等)。您可以尝试使用 repeat.vim。这可能会让您更接近您要寻找的东西。


13

11
您可以直接使用 "." 命令。
例如:如果您的文件中有10个 "abc" 并且您希望将其替换为其中的5个 "def"。
步骤1:输入命令“/abc”以查找第一次出现的 abc。 步骤2:将光标置于 "abc" 上,通过命令“cw”取出单词 "abc"。 步骤3:输入 "def" 作为替换,并按回车键转到命令模式。 步骤4:要重复此操作,只需输入命令 "n" 转到下一个 "abc" 的位置,并输入命令 "."。该命令会记住上次替换 "abc" 为 "def" 的操作,并在此处执行相同的操作。

3
您可以将@:映射到某个键以提高便利性:
:map <F2> @:

然后在使用重复时,它会更加容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接