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

问题描述 投票:24回答:6

在Vim中,我通常想重复执行一系列命令。说,我想评论5行,我会使用

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

有没有办法重复最后的“ .j”部分几次?

macros vim repeat
6个回答
35
投票

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

qa.jq@a@@

如果知道要重复多少次宏,则可以使用4@@或其他方式。


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直到注释完所有内容。


11
投票

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

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

我将转到第一行的顶部第一个字符,按Ctrl-v进入可视块模式,导航至最后一行(也许使用3j下移3行,也许使用4g直接转到到第四行,或者简单地单击G结束),然后键入I// <esc>一次在所有行上插入注释:

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

此外,还有一个非常方便的注释器/取消注释器插件,支持多种语言here。比手动插入/删除注释要容易。


3
投票

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


2
投票

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

maj兆字节:'a,'bs,^,//,

0
投票

尝试一下:

  1. 做某事

  2. 退出普通模式

  3. 类型,例如,22.

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

© www.soinside.com 2019 - 2024. All rights reserved.