27

在 Vim 中,我通常想多次重复某些系列的命令。说,我想评论 5 行,我会用

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

有什么办法可以多次重复最后的“.j”部分?

4

6 回答 6

41

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

qa.jq@a@@

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

于 2010-07-13T20:23:12.927 回答
16

您可以直观地选择要在其上重复的行,键入: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直到您评论了所有您想要的内容。

于 2010-07-14T00:36:00.640 回答
12

关于您的具体示例,我更喜欢使用可视块模式(使用 访问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直接转到第 4 行,或者可能只是G走到最后),然后键入I// <esc>以一次在所有行上插入注释:

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

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

于 2010-07-13T21:07:08.260 回答
4

试试这个:

  1. 做点什么

  2. 退出正常模式

  3. 键入,例如,22.

最后的命令将重复 22 次。

于 2020-05-30T08:10:56.300 回答
3

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

于 2010-07-13T20:26:04.087 回答
3

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

嘛
jjjj
mb
:'a,'bs,^,// ,
于 2010-07-13T20:27:50.260 回答