Vim のウィンドウを Gyazo る

この記事は Vim Advent Calendar 2012 210日目の記事になります。


さて、画像データを Web へとアップロードするサービスとして『Gyazo』という Web サービスがあります。


わたしも愛用しており、素早く画面をキャプチャして Web へとアップロードしているのでかなり重宝しています。
(特に Lingr を使っていると。


と、いう事で Vim のウィンドウ(GUI ではなくて Vim 内部の)をキャプチャして Gyazo へとアップロードするプラグインをつくってみました。
ぶっちゃけ出落ち。

[Vim 以外で必要な外部コマンド]


画像ファイルを生成するのに PhantomJS を、画像ファイルを Gyazo へアップロードする処理に Ruby を使っています。
(詳しくは後述参照。

[インストール]

NeoBundle "osyo-manga/vim-gyazo"


また、open-browser.vim を導入しておけばアップロードした Gyazo のページを開くことも出来ます。

[使い方]

" test.png を gyazo へポストする
:GyazoPost test.png

" post 後に open-browser でページを開く
:GyazoOpenBrowser test.png

" gyazo の URL を TweetVim でツイートする
:GyazoTweetVim test.png

" カレントウィンドウを post してページを開く
" post される範囲はカレントウィンドウの最上行〜最下行
:GyazoOpenBrowserCurrentWindow

" 3 〜 10 行目を post する
:3,10GyazoOpenBrowserCurrentWindow

" 出力結果を TweetVim でツイート
:GyazoTweetVimCurrentWindow

[実装方法]

どうやって処理しているのかというと

  • 1.2html.vim を使用してカレントウィンドウの HTML を生成
  • 2.生成された HTML を PhantomJS を使用して画像ファイルに保存
  • 3.保存された画像ファイルを Ruby を使用してアップロード

というような流れになっています。
内部で 2html.vim を使用して HTML に変換しているため、Vim 上のハイライトがそのまま反映されます。
また、外部コマンド使いまくりなので post されるまでだいぶ時間がかかります。
(将来的には非同期化する可能性がありますがまだ未定。
あとわたしの環境でしかテストしていないので何か問題があるかもしれませぬ。


いまは open-browser でブラウザを開いていますが、TwitterLingr へ直接 post できれば便利そげ…?

[追記]

TweetVim するコマンドを追加しました。
これで長いソースコードGyazo ってツイートしたり出来ます。