そうだ Vim で画像を表示させよう

この記事は Vim Advent Calendar 2012 65日目の記事になります。
いやー今年も Vim と過ごすクリスマスが楽しみですね!
まだまだ参加者は募集中なのでまだ未参加の人はどさくさに紛れて記事を書いてみるのもいいともいます。
また、既に参加して2週目をやりたい!って方がいましたらお手数ですがこの記事のコメント、もしくは lingrVim 部屋で言ってもらえればスケジュールに登録するので教えて下さい。

[sugarpot.vim]

と、いうことで Vim から画像ファイルをプレビューする事ができるプラグインを作りました。
Vim から Vim を立ちあげてそこに画像ファイルを XPM に変換して描画を行なっています。
また動作に Vim の clientserver を使用しているので +clientserver が必要になります。


本来であれば XPM を用いて画像ファイルの描画を行うと Vim がかなり重くなるんですが、今回は別に起動している Vim で描画を行なっているのでレスポンスの重さはあまり気になりません。


[動作に必要な外部コマンド]

このプラグインを使うにあたり ImageMagick の convert コマンドが必要になります。
convert コマンドを使用するためには予め ImageMagick をインストールしておく必要があります。


また、URL から画像ファイルを参照したい場合は curl も必要になります。

[プラグイン]

NeoBundleLazy "osyo-manga/vim-sugarpot", {
\   'autoload' : {
\       'commands' : [
\           {
\               "name" : "SugarpotPreview",
\               "complete" : "file",
\           }
\       ]
\   }
\}

" 設定例
let s:bundle = neobundle#get("vim-sugarpot")
function! s:bundle.hooks.on_source(bundle)
    " 使用するフォントとサイズが設定出来ます。
    let g:sugarpot_font = "MS_Gothic:h1"
    
    " デフォルトだと立て伸びしてしまうのでこれで適当に調整してください
    let g:sugarpot_convert_resize = "50%x34%"
endfunction
unlet s:bundle

[使い方]

" 新しい gvim を立ちあげて homu.jpg を XPM 形式で表示する
" この場合は拡張子を除いた画像のファイル名がサーバ名になる。
:SugarpotPreview homu.jpg

" ! が付いている場合は g:sugarpot_default_servername に設定されている
" サーバ名で起動する
" gvim を使いまわす場合はこちらを使用する
:SugarpotPreview! homu.jpg

" curl が使用できるなら Web の画像をプレビューする事も出来ます。
:SugarpotPreview http://www.vim.org/images/vim_drill_small.JPG

[動作]



※モバイル機+キャプチャを行なっているので上の動画の処理はだいぶ遅いです。普通のマシンであればもっと処理が早いです。


とりあえず、今はだいたいこんな感じです。
まだわたしの環境(WindowsXP)でしか動作テストをしていないので他の環境だとエラーが出るかも知れません。
エラーが出た場合はコメント等で教えてもらえると助かります。

[まとめ]

ちょっと強引ではありますが、こんな感じで Vim で画像を描画する事が出来ました。
ぶっちゃけ mattn さんのこれと kaoriya さんのこれとの合わせ技なだけなんですけどね!
まぁ実際に Vim で画像を表示したい事があるのか、と言われるとそんなにないとは思いますが…手段としてはありだと思います。
別に Vim じゃなくても…と言ってはいけない
ちなみに convert を使えば動画ファイルの変換もできるようなので『Vimで動画再生!』みたいなこともできると思いますがレスポンスがガタガタになりそうなので今のところ考えていません(ネタとしては面白そうですが。


と、いう感じで2週目を終わりたいと思います。
明日の Vim Advent Calendar 2012 は yomi322 さんになります。
まだまだ Vimmer の Advent Calendar は終わらんよ!