2012-02-07 23 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 *'は ""か "*"と一致するべきですか?私は後で仮定している。 –

答えて

4

第2の捕捉グループに[^\n]*の代わりに.*を使用しました。複数行のフラグは必要ありません。

+0

美しい、ありがとう! – drozzy

+0

PCREからVimの構文に自動的に変換される 'eregex.vim'というプラグインがhttp://www.vim.org/scripts/script.php?script_id=3282あります。 –

0

その後、例えば、そのフィルタを介してパイプに現在のファイルをVimの中1G!Gまたは:%!を使用するパイプラインフィルタに

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

を既存のワンライナーを作ります

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

次のようになります:あなたはキャプチャグループを脱出し、私ことする必要が

​​

注私は-i -0peフラグのために話すことはできませんが、正規表現は

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

残念ながら私はperlをインストールしていません:-( – drozzy

+3

もちろん、誰もがperlを買う余裕がないわけではありません:-) – zgpmax

+0

私は無料でそれを望みません:-) – drozzy

3

あなたが探しているものの多くは、あなたが「魔法のように」設定されているものに依存しています。 vimが文字通り何を取るかについては、:help magicを参照してください。