2012-02-07 66 views
2

如何在Vim中編寫這個perl regex replace命令? (來自this pandoc epub tutorial服用):vim中的Perl正則表達式?

perl -i -0pe \ 
's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg' \ 
*/*.markdown 
+0

你能添加一個它應該匹配的例子嗎?正如我寫的,我不確定應該逃脫多少個符號。 '\ s *'匹配「」還是「*」?我假設後者。 – 2012-02-07 15:13:57

回答

4

我不能爲-i -0pe標誌說話,但正則表達式:

s/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg 

是:

​​

請注意,你必須逃脫捕獲組和我在第二捕獲組中使用.*而不是[^\n]*。你不需要多行標誌。

+0

美麗,謝謝! – drozzy 2012-02-07 15:23:09

+0

有一個名爲'eregex.vim'的插件,可以自動將PCRE翻譯成Vim的語法。 – 2014-01-11 20:05:30

0

讓您現有的一行到一個管道過濾器

perl -pe 's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg' 

然後使用1G!G:%!在Vim來管當前文件通過過濾器,例如

:%!perl -pe 's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg' 
+0

對不起,我沒有安裝perl :-( – drozzy 2012-02-07 15:24:11

+3

當然,我忘記了不是每個人都可以買得起perl :-) – zgpmax 2012-02-07 19:30:09

+0

我不想要它是免費的:-) – drozzy 2012-02-07 21:13:29

3

很多你正在尋找的東西取決於你設置的「魔術」設置。請參閱:help magic瞭解更多關於vim需要從字面上理解的內容。