Vim昔語/スクリプト編

Vimスクリプトにまつわる愉快な思い出話。

前のエントリがどうやら好評なので、調子にのって続編としてVimスクリプトにまつわる愉快な思い出話など。

チャットでmattnさんとやりとりをする中で、Vimスクリプトが話題になったキッカケはよく覚えてない。たぶん最初はcalendar.vimあたりを見せられたんだとおもう。今に比べればまだまだ単純だったcalendar.vimはそれでも良くできており「おおっ」と感心しながらも、ちょっとしたプログラマ特有の嫉妬をこめて「皇紀での表示はできないのか?」みたいなボケをかましたのだが、本場のボケ返しはそれを上回っておりすぐに皇紀に対応した版ができあがって舌を巻いたりしていた。大体はこんな感じでmattnさんが小物スクリプトを作り、私が添削したり改良したり一般化して返す、という感じで幾つかのスクリプトが生まれていった。特に新聞サイトの見出し表示(当時RSSは普及してなかったのでHTMLパースが一般的だった)や、今は無きExcite翻訳あたりが記憶に残っている。

時間的には前後するが、私が役に立つVimスクリプトを書いたのはautodate.vimやformat.vimあたりが最初だろう。特にformat.vimは西岡さんが日本のメーリングリストに投稿したスクリプトがキッカケだったハズだ。そのスクリプトは非常に泥臭い方法を用いてはいたが、ある一定幅でテキストを折り返して整形するというものだった。今では当たり前の機能だが、当時はそんなこともできなかった。私はそのスクリプトが採用していた泥臭い手法にはガッカリしたものの、その目指す先・行き着く先に大きな感銘とインスピレーションを受け、西岡さんの版を基にVim固有の機能(正規表現で画面上のカラム位置を取り扱える)を使った版を書いた。その後、そのスクリプトは西岡さんの手によって、しっかりコメントリーダーやらなにやらに対応した素晴らしい版に成長した。今では中平さんのautofmt.vimにその役目を譲り渡したが、それを可能にした過程においても実はformat.vimが大事な役目を果たしていたこと、さらにはmodernなVimの機能を実現可能に至らしめる上での最初の一里塚だったこと、ひいては「行き着く先に大きな感銘とインスピレーションを受け」の内容と合わせてそのうち書くかもしれない。

という感じで、私がVimスクリプトに取り組む姿勢は万事受け身だ。誰かが書きおこしたスクリプトを眺め、少し気にいる所があれば、気に入らないところを直して返す。というのも私は本質的にVimスクリプト、プラグインは少ないほど良いという超保守派で、今もそうである。そんな私が自らVimスクリプトを大量に書き起こすことなどない…ハズだった。あの日までは。

ある日mattnさんがいつものようにある一本のスクリプトを送ってきた。巨大掲示板2ちゃんねる(通称2ch)を読む2ch.vimである。またしても私にあらゆる意味での衝撃が走った。知っている人もいるだろうが、私は筋金入りの2ちゃんねらーだった。今では書くことも少なくなったが当時はバリバリ書きこんでは煽られてファビョっていたような気がする。そしてこの2ch.vim、確かに動くが例によってツッコミどころ満載である。簡単に言うと新聞サイトリーダーの延長でHTMLをパースしていた。mattnさんは私につっこませるためにわざとやってるんじゃないかとも思ったが、その時点で私の怒りが有頂天で寿命がストレスでマッハだった。いや当時まだブロント語はなかったと思う。これならw3m(テキストブラウザ)で見たほうがはるかに良い、少なくともdat(2chの生データ)で読むべきだろう!

私はその衝撃と怒りに身を任せVimスクリプトをゼロから書き始めていた。そうして2ch.vimを受け取った昼過ぎからコードを書き続け、翌朝には2chを読めるブラウザーが誕生した。Chalice for Vimだ。さらにその晩か、翌日だったかには2chに投稿できるようになっていた。その後のChaliceは、まぁ順調に機能を追加していったものの、私が2chに飽きた最近ではもっぱらgithubの肥やしというところだろうか。恐らくChaliceはVimとVimスクリプトをプラットフォームとして作られた世界初の本格的なアプリケーションだったと言って良いだろう。もしかしたら今もあとに続くアプリはないかもしれないが。ともあれChaliceの誕生で私が2chを利用する時間は拡大し、煽られてファビョる頻度も劇的に増大した。

Chaliceを開発する中でVimスクリプトに限らず、Vimのあらゆる性格を体験したと言って良いと思う。見えてきたのはVimに足りないものと弱点とバランス、Vimでは何をすべきで何をすべきではないか。

以下、続くかもしれない。

ちなみにあとでわかったことだが2ch.vimを書いた当時のmattnさんはdatの存在を知らなかった。