🤞

VimConf 2025 small に運営として参加しました

に公開

はじめに

昨日 11/2 秋葉原のアキバプラザ 5F 大ホール。VimConf 2025 small が開催されました。例年の様に僕はスタッフとして参加させて頂きました。

受付で「ノベルティを持っていって下さい」と言っていたのが僕です。

スタッフ業をしていたので全ての発表を聞けてなかったのですが。幾らかは聞きました。その中でも僕が気になったのは2つ。

And Yet, Vim Survived: Thinking and Seeing in the Age of Code You Don't Write - Λlisue

ご本人は話がうまいので、見ている方々は「面白かった」という感想が残りがちなんですが、内容としては Vim の今後についての話です。
業種にもよりますが、我々 IT エンジニアの世界でも AI によるプログラミングが浸透し始めてきました。これが意味するのは、過去に IT エンジニアの製造性能を極限まで高めてきたテキストエディタ Vim が今後どうなってしまうんだろう、という危惧である。
しかし Λlisue 氏も言う通り、Vim が IT エンジニアの製造性能をそれだけ高められたのは、For writing だけでなく、For reading にも有能だったからです。
複数からなるソースコードを縦横無尽に走り回り、<C-o> で一気に戻る事ができる機能により、脳へのストレスを減らしてきたのが理由です。

発表にもあった通り、Vim の役目は今後、AI が書いたコードを人間がレビューする際に使われるエディタへと変わっていくのかもしれませんね。

Designing Repeatable Edits: The Architecture of . in Vim - Satoru Kitaguchi

実はこの日、「エンジニアの楽園 vim-jp radio」の収録があり、その中でもお話させて頂いたのだけど、昨今 Vim のユーザ層は変わりつつあります。Vim の全体のユーザ数としては、実はそれほど変わっていません。そしてなんと若い世代に Vim が浸透し始めています。それにともない Vim のどの部分に興味があるのかという部分にも変化が生まれています。
これまで言ってしまうと、Vim の本体部分に興味があり、そこに多くの Vimmer が食いついてきましたが、昨今では Neovim のグラフィカルな部分に興味を惹かれて使うユーザも増えてきました。
これは別に問題でもありません。むしろ新しい人達が増えて嬉しい話です。ですので、今回 Satoru Kitaguchi さんのこの発表を見て正直「この話を皆さんは面白いと思って貰えるだろうか」という感想と同時に「Kitaguchi さん若いのによくこれだけ調べたな」という驚きがありました。(僕はこの発表が大好きです)

Vim が高速テキストエディタと言われる理由の1つが「ドットリピート」の存在です。

Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

例えば行の先頭で d3w とタイプすると Vim は英単語を3つ削除します。現在の行から4行下まで、この d3w を実行したいとしましょう。Vim の場合、初めに d3w をタイプしたら、あとは j.j.j. とタイプするだけなのです。途中に1行飛ばしたい行があるなら j.j.jj. ですね。さらに検索してマッチした行だけ d3w したいなら /^foo<cr>.n.n.n. ですね。

これが何を意味しているのかというと、Vim のドットリピートの為の履歴は、最初の行の Lorem Ipsum is を消す動作を「14文字消す」として覚えているのではなく「単語を3つ消す」で覚えているという事。なので、次の行に移った際にも、その行のコンテキストで「単語を3つ消す」が実行されているのです。

ここまでは多くの Vimmer も知っている事です。いっぽうで Vim プラグインではテキストの内容を大幅に変更する事があります。その様な場合には d3w の様な簡単なシーケンスではなく、setline() といった行の内容を更新する関数が使われます。これを使うと Vim の内部としては d3w の様なシーケンスで保存されず、つまりはドットリピートが出来なくなるという問題が生まれるのです。

実際に、ドットリピートしたい場合に「たった今行われたテキストの変更をドットリピートしたいとしたら、どうしたら良いのか」を知っているのはプラグイン側だけという事になるのです。

これをなんとか回避する方法としてあるのが、Tim Pope 氏が開発している repeat.vim です。これは .u がタイプされた際に、プラグイン側に指定された関数を呼び出すという簡単な仕組みです。

ぶっちゃけて言うと、setline 等を呼び出すプラグインをドットリピート対応するのであれば、この方法しかありません。これはもう数年前から分かってしまっていた事です。
僕としては、このプラグインの仕組みを Vim 本体にさっさと入れてしまえと思っています。

Kitaguchi さんの発表はこの問題点をあぶり出す、よい内容だったと思います。

おわりに

mopp さんのクロージング良かった。全員の発表内容をちゃんと覚えてるの凄い。

今年の VimConf は国際会議と呼べる規模で開催できなかったため small という名前が付いています。運営スタッフとして少し悔しい気持ちもありましたが、開催してみると X に #vimconf のハッシュタグが山ほど投稿され「これだよこれこれ」となりました。
またいつか国際会議と呼べる VimConf を開催出来ればいいなと思っています。では。

おまけ

今回の VimConf では2つ出会いがありました。1つは僕が普段使っている Nostr のクライアント、Rabbit の作者さんや、Nostr や Bluesky を初期から盛り上げて頂いていたしのさんに挨拶できた事。もう1つは (僕は実は Emacs も使えるのですが)、vim-jp ラジオの収録で Emacs の設定で leaf を使っているという話をしていたら、実は収録の見学にその leaf の作者さんがいました。

Discussion