如何一次注释多行?

Mic*_*ant 131 vim vi macro block-comment

如何选择一堆文本并将其全部注释掉?

目前我转到第一行,转到插入模式,然后键入# left-arrowdown-arrow,然后重复该序列,也许通过使用.重复功能来执行每一行可以节省一些击键次数。

无论如何,我是否可以(例如)在可视模式下选择多行或使用一系列行和 ex('冒号')命令,并在该范围内用 a 注释掉所有行,#使它们成为“块注释” ”。

#为块注释快速“取消注释”(删除's)的能力也很好。

cuo*_*glm 210

视觉块模式

首先,将光标移动到要注释的块代码中第一行的第一个字符,然后键入:

Ctrl + v                                    
Run Code Online (Sandbox Code Playgroud)

然后 vim 将进入VISUAL BLOCK模式。用于j向下移动光标,直到到达代码块的最后一行。然后输入:

Shift + i
Run Code Online (Sandbox Code Playgroud)

现在 vim 进入INSERT模式,光标位于第一行的第一个字符处。最后,输入#thenESC代码块现在被注释了。

要取消注释,请执行相同的操作,但不是 type Shift + I,您只需在mode 中突出显示它们后键入x即可删除所有#内容VISUAL BLOCK

  • 似乎不起作用。+1 用于视觉模式,-1 因为 `Shift I` 仅在选择的第一行打开 INSERT。不过,这可能只是 OSX 问题,因为这个与 Unix 完全不一致的操作系统很常见。 (33认同)
  • 适用于 MacVim。需要注意的是,它仅适用于 VISUAL BLOCK,不适用于 VISUAL 或 VISUAL LINE 模式。 (21认同)
  • @MattClark:你试过了,不是吗?它应该如何工作。编辑完第一行后,按“ESC”退出插入模式,所有内容都应用于所选行的其余部分。 (20认同)
  • 阅读@MattClark 的评论:“+1 for _visual_ mode”然后他说它在他的机器(OSX)上不起作用。我在 OSX 上用 macvim 试过它,它可以工作,但你必须使用 _visual block_,而不是 _visual_(也不是 _visual line_)。 (8认同)
  • 或者甚至使用 `/` 跳转到端点,或者如果端点是匹配的 `}`(或者如果向后跳转,则使用 `%`)。我比指定范围更喜欢视觉模式...... (3认同)
  • 在带有 VISUAL LINE 的 OSX 上,我只需按“ESC”两次即可传播到每个选定的行。 (3认同)
  • @cuonglm 该信息适用于那些似乎不起作用的人。你的回答是正确的。我只是想补充一点,它确实只适用于 VISUAL BLOCK。 (2认同)
  • 我尝试了几次,但对我不起作用。直到我意识到,我使用了 shift + v 而不是 ctrl + v。 Thx @atamanroman (2认同)

小智 169

范围:

您可以使用以下命令执行此操作:

评论:

:66,70s/^/#
Run Code Online (Sandbox Code Playgroud)

取消注释:

:66,70s/^#/
Run Code Online (Sandbox Code Playgroud)

显然,这里我们要注释从 66 到 70(含)的行。

  • 您确定不需要在范围后插入 's' 吗? (2认同)
  • 如果你想注释 `//` 而不是 `#` 需要用 \ 转义它们。`:66,70s/^/\/\/` (2认同)

ret*_*eto 31

代替

为了完整起见,这是另一种方式:

  1. 按进入视觉模式 v
  2. 选择您想评论的行(up/down箭头或j/ k
  3. enter:s/^/# /转换为:在选择 ( :)中将行 ( ^) 的开头替换为`# '


小智 11

标记:

以下步骤在命令模式下完成:

  1. 转到第一行并设置标记 mt
  2. 转到您想要范围的行
  3. 发出命令 :'t,.s/^/#/

解释

  • m#,其中#表示任何字母,在您当前的位置放置一个标记。以后可以使用 来引用该位置'#,其中#与以前的字母相同。在我们的例子中,我们使用了字母t
  • 命令:'t,.s/^/#/内容如下:
    • : 复杂命令的前缀
    • 't,.定义应应用以下命令的范围。在我们的例子中,它是从标记't到当前行.
    • s/^/#/是一个替换公式,用^文字字符替换所有行首#


Ram*_*esh 5

插入

有一个插件,它提供了一种基于正在使用的文件系统进行注释的有效方法。

此外,此答案讨论了如何使用NERD commenterfor vim此处讨论了有关如何使用该插件的更多基本说明。