EsoLang vi

https://github.com/irori/elvi

BrainfuckやUnlambdaで動くvi風エディタができました。 Jody Bruchon氏のviクローンを元にELVMコンパイルできるようにしたものです。

標準入出力しか使えないのでファイルの読み込み・保存はできません。コマンドも最小限しかありませんが、真面目に使うものでもないので構わないでしょう。

数種類のesolang用コードが生成されるので、言語による書き味の違いを試してみると良いでしょう。Whitespaceは滑らか、Unlambdaは重厚な感触になります(まあレスポンスの遅さが違うだけなんですが)。

ELVMのバックエンドによっては実行前に入力をすべて読み込むようになっており、そのような処理系では使えません。残念ながらvi on vimはできません。

実装について。端末のサイズ取得とかカーソル移動とかはエスケープシーケンスで頑張ってます。端末を直接入力モードにするのは標準入出力だけではどうしようもないので、シェルスクリプトで初期設定と後始末してます。

数値を文字列にして出力する部分が速度上のボトルネックになっていた(カーソル移動のエスケープシーケンスとかステータスラインの位置表示に必要)ので、除算を使わずテーブル引きで文字列化するようにしたら大分マシになりました。

rogueとかも移植できるかなと思ってましたが、viでこの速度だとちょっと厳しいかもですね。