Vim中,我通常想要重复一些命令。比如说,我想要注释5行代码,我会使用:
I//<Esc>j
.j.j.j.j
有没有办法多次重复最后的“ .j ”部分?
一种方法是将你的键序列分配给一个宏,然后运行宏一次,接着运行@@
run-last-macro命令。例如:
qa.jq@a@@
如果您知道要重复宏的次数,可以使用4@@
或其他任意数字。
你可以通过视觉选择要重复的行,在命令模式下键入: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
,直到你注释完你想要注释的所有内容。关于您提供的具体示例,我倾向于使用可视块模式(使用Ctrl-v
访问)进行多行插入。例如,如果我有以下行:
This should be a comment.
So should this.
This is definitely a comment.
Is this a comment? Yes.
我会先跳转到顶部行的第一个字符位置,按下Ctrl-v
进入可视块模式,在导航到最后一行(可以使用3j
向下移动三行,也可以使用4g
直接跳转到第四行,或者简单地使用G
跳转到结尾),然后键入I// <esc>
以一次性在所有行上插入注释:
// This should be a comment.
// So should this.
// This is definitely a comment.
// Is this a comment? Yes.
另外,有一个非常方便的评论/取消评论插件支持多种语言 在这里。它比手动插入/删除评论更容易。
Ctrl-V
方法对我不起作用... 只在第一行插入。也许是因为我还在使用 vim 7.2... - weronika尝试这个:
进行某些操作
退出到正常模式
输入,例如,22.
上述命令将重复22次。
针对您的特定示例,您还可以使用范围.,.5s#^#//#
(执行此操作和接下来的5行)或视觉块(按v,然后选择要更改的文本),然后输入:%s#^#//#
。
另一种方法是设置标记并在该范围内运行替换:
ma jjjj mb :'a,'bs,^,// ,
您可以在宏前附加计数来重复执行宏。例如,如果您将宏记录到a
寄存器中,并且您想要执行五次,则应键入以下内容:
5@a
5
,j
这样的东西吗? - C. Ross5\cc
,它会注释当前行和接下来的4行代码。5\cs
也会做同样的事情,但是它不会添加//
行注释,而是添加/*
和*/
来块注释你的代码行。更加灵活多变。 - cartbeforehorse