2010-04-20 62 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/ 
相關問題