babie steps

作業療法記録

Vimで.dotファイルの保存と同時にSVGへ変換して、さらにそのSVGからPNGに変換

if has("autocmd")
  autocmd BufWritePost *.dot silent :!"c:Program Files\Graphviz2.20\bin\dot.exe" -Tsvg <afile> > "<afile>:p.svg" && "C:Documents and Settings\baba\My Documents\bin\inkscape\inkscape.exe" "<afile>:p.svg" --export-png="<afile>:p.png"
endif

私が今やってるのが Windows でPATH通してないので、コマンド名のところがアレですが、Unix の人は適宜置き換えてください。

出力されるSVGとPNGのファイル名が、*.dot.svg, *.dot.png になってるのは、:p でフルパスにしてるから。だって、Inkscape コマンドライン版がフルパスじゃないと inkscape.exe のあるディレクトリで実行しちゃってエラー吐くんだもん。Unix の人は、:r.png とかでいいと思う。:r にすると拡張子抜きのファイル名がとれる。


試してないけど、Unix の人はこうなると思う:

if has("autocmd")
  autocmd BufWritePost *.dot silent :!dot -Tsvg <afile> > <afile>:r.svg && inkscape <afile>:r.svg --export-png=<afile>:r.png
endif

すっきりだね。SVG → PNG 変換は inkscape じゃなくて、rsvg 使った方が良いかもね。


あとはバックグラウンド実行にしたい。保存のたびに待たされるのがいやん。Vimスクリプトエキスパート求む。


追記:
silent 加えるだけでよかった。あとはコマンドプロンプトが一瞬立ち上がるのをどうにかしたい。引き続きおしえて君。