如何在Vim上重复某些动作?

时间:2010-07-13 20:17:24

标签: macros vim repeat

在Vim中,我通常希望有时重复一些命令。说,我想评论5行,我会用

I//<Esc>j
.j.j.j.j

有没有办法多次重复最后一个“.j”部分?

6 个答案:

答案 0 :(得分:33)

执行此操作的一种方法是将键序列分配给宏,然后运行宏一次,然后运行@@ run-last-macro命令。例如:

qa.jq@a@@

如果您知道要重复宏的次数,可以使用4@@或其他任何内容。

答案 1 :(得分:14)

您可以直观地选择要重复的行,键入:normal! .以使vim在每一行上使用.。因为你从视觉选择开始,它最终看起来像这样:

:'<,'>normal! .

但是,如果您添加和删除//条评论很多,您可能会发现以下映射非常有用:

" add // comment with K
noremap K :s,^\(//\)\=,//,e <BAR> nohls<CR>j
" remove // comment with CTRL+K
noremap <C-K> :s,^//,,e <BAR> nohls<CR>j

你可以使用5K评论5行,你可以使用视觉模式首先选择你的行,或者你可以锤击K,直到你评论了你想要的一切。

答案 2 :(得分:9)

关于您的具体示例,我更喜欢使用可视块模式进行多行插入(使用Ctrl-v访问)。例如,如果我有以下几行:

This should be a comment.
So should this.
This is definitely a comment.
Is this a comment? Yes.

我会转到顶行的第一个字符,点击Ctrl-v进入视觉区块模式,导航到最后一行(可能使用3j向下移动3行,也许使用{ {1}}直接转到第4行,或者只是4g结束),然后输入G一次在所有行上插入注释:

I// <esc>

此外,还有一个非常方便的评论者/非评论者插件,支持多种语言here。它比手动插入/删除注释更容易。

答案 3 :(得分:3)

对于您的特定示例。您还可以使用范围.,.5s#^#//#(执行此操作和接下来的5行)或视觉块(点击v,然后选择所需的文本),然后使用:%s#^#//#

答案 4 :(得分:2)

另一种方法是在该范围内设置标记并运行替换:

ma
jjjj
mb
:'a,'bs,^,// ,

答案 5 :(得分:1)

尝试一下:

  1. 做点事情

  2. 退出普通模式

  3. 类型,例如22.

最后一个命令将重复22次。