読者です 読者をやめる 読者になる 読者になる

Vim scriptテクニックバイブルを読みました ー 書評とVim scriptをこれから始めるあなたへ

Vim

Vim scriptについて解説した初めての技術和書が発売されるということで、ワクワクして中身も確認せずに注文しまいました。数日前には近くの郵便局までは来ていたのですが、学会や台風の都合で受け取れず、今日の朝に届きました。大体読んだので書評を書いてみます。他の方の書評はあまり読んでいないので、重複している点があるかもしれません。しかし、一人の読者として、あるいはVimプラグインを書いたことがある者として、自分の言葉で、本書を読んで感じた素直な気持ちを書いてみます。

Vim script テクニックバイブル ~Vim使いの魔法の杖

Vim script テクニックバイブル ~Vim使いの魔法の杖

この本の対象読者は、全くVim scriptを書いたことがない人です。または、自分はVim scriptを書いたことがないと思っている人です。この本を手にされる方は、おそらくvimrcファイルを書いたことがあると思います。その時点で、あなたはVim scriptを書き始めているからです。

この本は、Vim scriptの基礎から説明しています。言語の基礎とはつまり他の普通の言語と同様に、基本的なデータ型やその扱い、そして関数の書き方などです。最初は丁寧に書かれていますので、Vim scriptの全くの初心者の方ならば、この本の例を順番に試していくことで、これらに慣れていくことができるでしょう。

ただ、四章のあたりから、だんだん難しくて分からなくなっていくのではないでしょうか。例えばイベント一覧や、組み込み関数などは、短い説明がつらつらと並んでいるだけで、使用例があまり書いてありません。イベントと説明の一覧を眺めていても、具体的ににどういう操作(例えばファイルを開くだの、ウィンドウを分割するだの)をしたら発火されるのか、イメージわかないと思います。このレベルになると、一覧で勉強するよりも、「実現したいこと駆動」で新しいことを身につけていくほうがいいということでしょう。実際にコードを書いてみて、このイベントはこのタイミングで発火するんだ、この関数はこういう挙動なんだと、覚えていくしかないと思います。しかし、各関数につき4、5個の例が載っているだけでも読みやすさが違ったのではないかなぁと思います。両方ともリストなら…付け加えたリストを…0の時は最初の要素の前に…とか言われるよりも、具体例で書いてあったほうが分かりやすかったでしょう。

本書が途中から難しいと感じたら、一旦本を置いてみてください。そして、プラグインを書いてみると良いと思います。実際、言語の入門書というのは、あなたが言語を触るきっかけを作り、障壁を下げることができれば成功です。普段Vimを使っていて不満があることがあれば、改善するプラグインを作っていく過程でVim scriptを習得していけば良いのです。途中まで読んで放ったらかしにしているオライリー本、あるでしょう?苦労して通読するよりも、実際に手を動かして「実現したいこと駆動」で身につけていくのをおすすめします。

この本全体を通して言えることなのですが、図が全くありません。残念ながら、このことが本を読みにくくしています。イベントの説明ならば、例えばバッファーを作った時、どのイベントがどのタイミングでどういう順番で発火するかの図があれば、理解が深まるでしょう。autoloadの説明であれば、ディレクトリーの図、これはtreeコマンドの出力とファイルの内容を合わせたようなものでいいのですが、これを載せるだけでイメージしやすくなるでしょう。リスト型に対する関数はリストの絵を書いて、どの関数がどういう操作なのかという図があると便利でしょう。こういった図がない点が、少し寂しいところです。

本書ではデバッグ方法についても軽く触れられています。しかし、実際にVimプラグインデバッグしたい時に、この本に載っている方法はあまり使えないかもしれません。ある操作をすると何かのプラグインで原因不明な無限ループが生じる時にどう原因を特定すればいいか、:echoや:PrettyPrintの使えないような状況(例えばスクリプトが何度もループしている場合や出力・例外が抑制されている場合)で、変数の遷移を記録するにはどうすればいいか、などです。これらについては私が後日記事にしたいと思っています。

色々と首をかしげたくなる点はありますが、それでも入門書としてはきちんと書けていますし、よく我慢して書いたなぁと思います。このような本を書くことは非常に辛い作業であることが予想されます。正直、私だったら「ヘルプを読めやごるぁ」で済ませたくなると思います。忍耐強く本を書き上げた作者の皆様には敬意を表したいと思います。ご苦労様でした。


Vim scriptには、他の言語にはない特徴的な機能があります。イベントや、autoload関数、豊富な正規表現リテラル、b:、w:、g:、s:等変数のスコープ、バッファーの内容やバッファー自体を操作する様々な関数など、Vim script固有の機能を挙げ出したらきりがありません。これらを習得するには、継続的なコーディングと時間がかかります。しかし、あるレベルにまで達して、調べ方が分かってしまえば、何でも書けるようになるでしょう。調べ方とは具体的に言うと、helpの引き方見方と、他のプラグイン開発者への質問を躊躇しないことです。後はVim scriptの知識よりも、設計のセンスが重要になってきます。巨大なVimプラグインの設計法は、誰も明文化していませんし、これが正解だという方法もありません。一般的な言語における設計方法を元にして、辞書やautoloadの仕組みをうまく活用し、Vim scriptという言語に合う設計方法を考えるのは、非常に楽しいことです。ぜひ、あなたなりの設計を考えてみてください。

Vimは世界中の多くの人が使っている道具です。しかし、Vim scriptをきちんと書ける人が少ないというのは事実です。他の言語と書ける人数で比較すると、圧倒的に少なくなります。これはどういうことを意味しているのでしょうか。それは、あなたが書いたVimプラグインは、世界中の多くの人に使ってもらえる可能性があるということです。他の言語よりも書ける人が少ないということを言い換えると、Vim scriptの世界は敵が少ないと言うことができるでしょう。あなたの自由で柔軟な発想で新しいプラグインを作り、Vimの世界をより良くしていきましょう。敵が少ないということは、あなたの発想が新しいものである可能性が高いということにもなるでしょう。何よりもまず大事なのは、あなたが、あなた自身のVimをより良くしたいと思うことだと思います。既存の状況に不満を持ち、それを改善するプラグインを作り、公開してもなお、一番の使用者であること、それがプラグイン開発者として成長していく道だと思います。あなたのプラグインを使える日を楽しみにしています。