2011-05-05 119 views
7

我正試圖在vim上實現一個簡單的替換,但不能正確使用它。我需要刪除整個文件中與模式匹配的所有行。模式是「某事*」,意思是「某事」,隨後任何東西直到行尾。 我試過:%s/pattern*\n//g:%s/pattern*$//g沒有成功。 任何想法?vim:用no行代替行模式

乾杯!

+2

僅供參考:*適用於您模式中的前一個字符,因此在您的情況下,它將匹配零個或多個n。 – 2011-05-05 08:51:48

+0

對,我總是對shell擴展字符感到困惑:/ – brafales 2011-10-18 07:11:13

回答

6

使用:g而不是:substitute

:g/pattern/d 

將刪除所有與模式匹配的行。

至於模式,你的將匹配patterpattern,patternn等。使用通配符.來匹配任何字符。所以你的正則表達式應該是pattern.*$ ---但是如果你想完全刪除這些行,那麼:g/pattern/d就行了。

+0

謝謝,正是我在找的東西,必須習慣閱讀更多的手冊! ;) – brafales 2011-05-05 09:02:18

+0

@brafales,是的。 ':g'是'ex'魔法的另一半。 :)一個真正隱藏的強國,可以做有趣的技巧。 – progo 2011-05-05 09:06:07

+2

另外一個補充:'g/pattern/d _'(注意下劃線)的作用與s /.*模式相同* \ n \ = // g',而你的版本會破壞未命名,數字(1-9),可能還有其他一些寄存器。 – ZyX 2011-05-05 17:37:43

0

取決於vim版本你使用,你可能有什麼,我要提出的麻煩:

:%s/pattern.*^V^M//g 

對於^V,硬是打ctrl-v,其次是ENTER(^ M)鍵。 ^V可讓您在不解釋角色的情況下輸入文字。

+0

點的意思是「除了換行符之外的任何符號」,所以不需要使用這樣的集合。 – ZyX 2011-05-05 17:39:20

+0

好點。把它改回到我以前的樣子。 – 2011-05-05 18:38:24