2010-04-20 65 views
9

嗨在Gvim我需要在文件中的每个评论之前插入一两个空行。如何在VIM中的每个评论(例如“#”)之前插入空白行?

#comment 1 
#comment 2 
statement 1 
statement 2 
#comment 3 

运行comamnd后,它应该是

#comment 1 

#comment 2 
statement 1 
statement 2 

#comment 3 

我如何做到这一点?

感谢

更新:谢谢你的答案

但如果评论是连续的,我不想换行符在它们之间自动加入。有没有办法做到这一点?

#comment 1 
#comment 2 

我不希望它成为

#comment 1 

#comment 2 

回答

20

您也可以使用这个命令::g/^#/norm O

好吧,这里是一个解释:

这是:global/^#/normal O的快捷方式,这意味着:

  • 每行以 '#'(:global/^#/
  • 做 'O' 在 '正常模式'(normal O)命令 - 这意味着做在'普通'(不是插入而不是:命令)VIM模式下,'O'键是做什么的。 'O'插入一条新的线。
+0

我觉得这是最好的答案至今因为它是最直观的,但也许你应该解释它的工作原理和原理。 – matias 2010-04-20 15:29:21

+0

添加解释 – 2010-04-20 19:50:32

+0

':g [lobal]'王牌':s [ubstitute]'+1为您先生 – 2010-04-22 18:16:26

0

使用此命令::%s/^\ze\s*#/\r/

1

不影响第一线

的例子输出看起来应该有该文件的第一行前不换行。 您可以添加一个后台检查来实现。

:%s/^\n\@<=\ze\s*#/\r/

\n\@<=只匹配,如果有在当前位置之前换行,所以第一个行不匹配。欲了解更多信息,请参阅:h \@<=

这也可以通过行检查完成。以下正则表达式仅匹配那些不是第一行的行。

:%s/^\%>1l\ze\s*#/\r/

\%>1相配下面线1。见:h \%>l


这里的东西应该与更新问题的工作,也就是说,只有在当前行前添加一个换行符,如果有之前没有注释行。

:g/^\%^\@<!\(^\s*#.*\n\)\@<!\s*#/norm O

^\%^\@<!如果文件的开头是之前不匹配这条线。 :h \%^和:h \@<!

\(^\s*#.*\n\)\@<!如果上一行的第一个非空字符不是#,只匹配这一行。

此正则表达式将改变

 
#comment 1 
#comment 2 
statement 1 
statement 2 
#comment 3 

 
#comment 1 
#comment 2 
statement 1 
statement 2 

#comment 3 
2

有一个解决方案,这在 “未改良六” 工程,以及:

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

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

希望这有助于 - 我要感谢海基指点一号线问题

0

的另一种方式(适用于太一号线)

:s/^[ TAB]*#-1s/^/\r/ 
相关问题