如何在 Vim 中重复任何命令,例如 emacs 中的“C-x z”?
Posted
技术标签:
【中文标题】如何在 Vim 中重复任何命令,例如 emacs 中的“C-x z”?【英文标题】:How do I repeat any command in Vim, like "C-x z" in emacs? 【发布时间】:2011-06-14 23:00:44 【问题描述】:在 Vim 中,有没有什么方法可以重复上一条命令,不管它是否是编辑,并且没有先见之明先录制宏?
例如假设我输入:bn
,并想再做一次(这是错误的文件)。按.
显然不行。或者也许我正在做gE
并想重复一遍(只需按一下键,因为显然gE
打字有点痛苦)。
也许有一些插件?类似于this question。
(更酷的方法是将许多命令追溯绑定到一个宏,因此可以键入 5qa@a
或其他内容来重复最后 5 个命令...)
【问题讨论】:
【参考方案1】:要重复命令行命令,请尝试@:
,要重复普通/插入模式命令,请尝试.
,
如果您想使用相同的快捷方式,请将以下映射添加到您的 .vimrc:-
:noremap <C-P> @:<CR>
- 这会将 Ctrl+P 映射到上一个命令行命令。您可以映射任何其他组合。
【讨论】:
那么像“gE”这样的普通模式命令呢?有一个 ":norm" 命令用于从命令行执行普通模式命令,但它不会重复...gE
到底做了什么?我尝试dw
删除一个单词,然后我按下.
删除另一个单词
是一个动作命令,“倒退到WORD的末尾”,E的倒过来。
ctr+P 用于自动完成代码,所以你可能不会重新映射到那个
Ctrl+P 也映射到了所谓的插件CtrlP【参考方案2】:
:help repeating
将提供典型的重复命令(如 .、@: 等)。你可以试试repeat.vim。这可能会让您更接近您正在寻找的东西。
【讨论】:
【参考方案3】:对于运动命令,Vim 没有内置机制。 Find 和 To 命令 (f
/F
/t
/T
) 有 ;
和 ,
重复和反转。有几个插件可以扩展这些绑定以重复其他运动命令:
http://www.vim.org/scripts/script.php?script_id=2174
http://www.vim.org/scripts/script.php?script_id=3665
后者应该支持使用;
重复gE
【讨论】:
【参考方案4】:你可以只使用“。”
示例: 您的文件中有 10 个位置有“abc”,并且您想在其中的 5 个位置用“def”替换它。
第 1 步:通过键入命令“/abc”查找 abc 的第一次出现 第2步:一旦光标在“abc”上,用命令“cw”替换abc以取出单词“abc” 第 3 步:输入“def”作为替换,然后按 Enter 进入命令模式 第 4 步:要重复此操作,只需键入命令“n”即可转到下一个出现的 abc 并键入命令“.”。 该命令会记住您上次将“abc”替换为“def”,并将在此处执行相同操作。
【讨论】:
【参考方案5】:您可以将@:
映射到某个键以更方便:
:map <F2> @:
然后重复使用它会更容易。
【讨论】:
以上是关于如何在 Vim 中重复任何命令,例如 emacs 中的“C-x z”?的主要内容,如果未能解决你的问题,请参考以下文章