てがみ: qatacri at protonmail.com | 統計 | 2023

202300700

一時期 neovim を使っていたが、今はオリジナルの vim に戻っている。 MSYS2 の標準パッケージに neovim がないから、という開発者にためいきをつかれそうな理由が一番なのだが、ただ、 neovim の方向性が正しいのか? という疑問もずっと持ってはいる。以下 vim/neovim をネタに書いているが、 50% くらいは「高度に拡張可能なプログラムはどうあるべきか」についての雑感である。

neovim はスクリプト言語を Lua に置きかえようとしている。しかし vim script は ex コマンドでもある、というかそちらが源流であり、互換性を捨てたとしても完全になくすことはできない。ここを Lua に置きかえたら、単語の置換にいちいち buffer:replace("\\[.*\\]", "\\1") みたいなコマンドを打つことになる。これはシェルスクリプトが Python に置きかえられないのと同じことである。そこには DSL として必要な特殊性がある。

歴史的事情を忘れて vim(<9) script やシェルスクリプトの言語仕様が素晴らしいという人はほとんどいないと思う。でもその問題を解決するために Lua や Python などの汎用言語を組みこみ、二つの世界を作るのが良いとは思わない。 vim9 は ex インタプリタとしての仕様を捨てていない。

もう一つの neovim の大きな特徴として、埋めこみ用途に MessagePack による RPC を用意していることが挙げられる。これも個人的にはちょっと疑問で、やるなら libvim のようにライブラリ化するアプローチの方が自然に思える。 0 からテキストエディタを開発するとして、エディタのコアと UI をプロセス分離する設計にするだろうか。

まあでも私が vim plugin の開発者だったら vim script に悪態をつき、「全人類は neovim に移行してくれ」とか言ってそうではある。