🦍

Vimでソースコードから画像を生成するプラグインを作った

2022/09/05に公開

初めに

去年末くらいに、Vimでソースコードを画像化するプラグインを作りました。

https://zenn.dev/skanehira/articles/2021-12-04-vim-generate-image

しかし、このプラグインはgermaniumというGo製のCLIを必要としていて、外部コマンドをインストールする必要がありました。
基本的に外部依存はあんまり好きじゃないのですが、画像を生成するライブラリもないため、依存を剥がすのを半ばあきらめていました。

そして、つい先日コマンド依存を剥がすことに成功したので、新しく作ったプラグインの紹介を兼ねてその話を書いていきます。

プラグインについて

denopsのプラグインになります。

https://github.com/skanehira/denops-silicon.vim

使い方はシンプルで、:Siliconを実行するだけです。
ファイルに出力したい場合は:Silicon out.pngとパスを指定します。
パスがない場合は、自動的にクリップボードにコピーされます。

denops-silicon

背景色やテーマ、フォントなどはオプションで指定できるので、詳細はヘルプもしくはリポジトリのREADMEを参照してください。

仕組み

DenoFFI APIを経由して、Rust製のソースコードから画像生成するSiliconを使っています。
DenoからSiliconを使うためのライブラリも合わせて作りました。

https://github.com/skanehira/deno-silicon

FFIなのでSilicon自体をインストールすることなく使えます。つまり外部コマンド依存はこれで剥がせたわけです。
ただ、Linuxの場合は次のように、いくつかパッケージをインストールする必要があります。
詳細はSiliconのREADMEを参照してください。

sudo pacman -S --needed pkgconf freetype2 fontconfig libxcb xclip

既知の問題

現在、deno-silicondenops-silicon.vimDenov1.24.3以前までしか動きません。
v1.25.0からはFFI周りに破壊的変更があったため、まだその対応ができていない状態です。

ちなみに、以前作ったクリップボードのモジュールも同様の問題を抱えていますが、これもそのうち対応する予定です。

https://zenn.dev/skanehira/articles/2022-08-22-deno-clipboard

最後に

普段、denops-twihi.vimでソースコードを添付してつぶやくことが多く、画像化のプラグインを愛用していました。
この度、ずっと外部コマンド依存を剥がしたかったので、それができて満足しています。

みなさんもよかったら試してみてください。

Discussion