🐕

Vim上でペットを飼えるようにした話

に公開

発端

皆さん,VSCodeは使っているでしょうか。僕は使っていません。が,テキストエディタについて調べているからか,数年に一度VSCodeを可愛くしようとする記事が案内されてきます[1]
そこでvscode-petsの存在を知りました。VSCodeで出来るならVimでも出来るはず,と思うのがVimmerの性というものです。

紹介

ということで作成したプラグインがこちらです。

https://github.com/MeF0504/vim-pets
ボールを投げるとペットが集まってきます。

また,拡張プラグイン を入れることで,違うペットを表示させることもできます。

仕組み

このプラグインは背景部分と動き回るペットの2層から主にできています。
背景部分はpopup windowやfloating windowを使って通常のウィンドウに重ねています。
popup windowはVimに於いて通常のウィンドウの上に重ねることのできるウィンドウです。これを用いることで,Vim上で開かれているファイル(バッファ)に影響を与えずにペットを表示することが出来ます。また,VimにはNeovimというフォークがあり,こちらでpopup windowに相当する機能はfloating windowと呼ばれています。私は基本的にVimでもNeovimでも動くようにプラグインを作っているので,vim-petsでも表面上の動作が変わらないように処理を調整しています。
ペットのイメージは単純に絵文字を使っています。Vim上で画像を表示する手段も探しましたが,スマートな手段はなさそうなので諦めました[2][3]。この絵文字を同様にpopup windowやfloating windowを使い,背景に表示させています。更に,これらのウィンドウはpopup_setoptionsnvim_win_set_configなどの表示を更新する関数があるため,これをタイマー機能を使って1秒ごとに呼び出し,位置の変更を行っています。タイマー機能はその名の通り,一定時間ごとに関数を実行してくれる機能です。タイマーで呼び出された関数は非同期で動くため,コーディングを邪魔すること無くペットを動かすことが出来ます。
vim-petsは色々な機能を使ってはいますが,純Vim scriptのみで実装されています。

終わりに

今回は自分の作成したVim pluginの紹介でした。Software designの表紙に毎回動物がいるように,プログラマーと動物は切っても切れない関係です。皆さんもコーディングに疲れたときは是非Vim上にペットを飼ってみては如何でしょうか。

脚注
  1. これとか,これとか,多分これも.. リンクが切れていますが。 ↩︎

  2. 例えばxpmファイルを使ったり,Sixelを組み込んでコンパイルしたり,といった案がありました。こちらはターミナルがSixel対応していれば動くので,もう少し安定すれば使えそうですが... ↩︎

  3. ところで,ターミナル上の画像表示と言えばSixeliTerm2のInline Images Protocolだと思っているのですが,今年 (2025年) の頭にSixelのレポジトリがアーカイブされました。アーカイブ関連のIssueなどもなさそうですが,何があったのですかね... せっかくこんなページもあるのに。(2025/9/2 追記)オリジナルのlibsixelレポジトリ が7月末に復活したようですね。突如姿を消したと聞いていたので良かったです。 ↩︎

Discussion