如何在VIM中的每个注释(如“注释”)前插入一个空行?

如何在VIM中的每个注释(如“注释”)前插入一个空行?,vim,Vim,您好,在Gvim中,我需要在文件中的每个注释前插入一两行空白 乙二醇 在运行comamnd之后,应该 #comment 1 #comment 2 statement 1 statement 2 #comment 3 我该怎么做 谢谢 更新:谢谢你的回答 但是如果评论是连续的,我不希望在它们之间添加换行符。有办法做到这一点吗 乙二醇 我不想这样 #comment 1 #comment 2 使用此命令::%s/^\ze\s*#/\r/您也可以使用此命令::g/^\O 好的,这里有一个解

您好,在Gvim中,我需要在文件中的每个注释前插入一两行空白

乙二醇

在运行comamnd之后,应该

#comment 1

#comment 2
statement 1
statement 2  

#comment 3
我该怎么做

谢谢

更新:谢谢你的回答

但是如果评论是连续的,我不希望在它们之间添加换行符。有办法做到这一点吗

乙二醇

我不想这样

#comment 1

#comment 2

使用此命令:
:%s/^\ze\s*#/\r/
您也可以使用此命令:
:g/^\O

好的,这里有一个解释:

这是
:global/^#/normal O
的快捷方式,表示:

  • 对于以“#”开头的每一行(
    :global/^#/
  • 在“正常模式”下执行“O”命令(
    normal O
    )–这意味着执行“O”键在“正常”(非插入和非:命令)VIM模式下的操作。“O”插入一个新行

    • 不影响第一行

      示例输出看起来好像在文件的第一行之前不应该有换行符。 您可以添加一个lookbehind检查来实现这一点

      :%s/^\n\@l


      更新后的问题应该在这里使用,即,如果在当前行之前没有注释行,则只在当前行之前添加一个换行符

      :g/^\%^\@

      ^\%^@如果文件开头在该行之前,则与该行不匹配<代码>:h\%^
      和:h
      \@

      \(^\s*.\n\)\@仅在前一行的第一个非空字符不是#时匹配此行

      这个正则表达式将改变

      #comment 1 #comment 2 statement 1 statement 2 #comment 3 #评论1 #评论2 报表1 报表2 #评论3 到

      #评论1 #评论2 报表1 报表2 #评论3
      有一个解决方案,也适用于“未改进的vi”:

      :2,$g/^[TAB]*#/s/^/^M/

      其中TAB和^M必须作为相应的控制字符输入

      希望这有帮助-我感谢Heikki指出第一线的问题

      还有另一种方法(也适用于第一线)


      我认为这是迄今为止最好的答案,因为这是最直观的,但也许你应该解释一下它是如何工作的以及为什么工作的。
      :g[lobal]
      胜过
      :s[substitute]
      +1先生,这是我所需要的全部,但实际上并没有回答这个问题,因为它不想让空格注释加倍。
      #comment 1
      
      #comment 2
      
      #comment 1 #comment 2 statement 1 statement 2 #comment 3 #comment 1 #comment 2 statement 1 statement 2 #comment 3
      :s/^[ TAB]*#-1s/^/\r/