vim-jp » Vimのユーザーと開発者を結ぶコミュニティサイト

Vim の作者 Bram Moolenaar への 10 の質問

Posted at 2014/11/29


10 Questions with Vim’s creator, Bram Moolenaar - Binpress の翻訳です。

Vim の作者 Bram Moolenaar への 10 の質問

by Alexis Santos, November 19, 2014

Vim の登場から 23 年、何百万行ものコードが Vim で書かれました。私たちはこの偉大なテキストエディタの作者である Bram Moolenaar にお話を伺い、20 年間の開発で彼が学んだことや、NeoVim についての彼の考えなどを聞きました。また、Reddit の Vim ユーザーからの質問も投げかけてみました。Bram の回答をご覧下さい。

1: このような大きくて広く使われるソフトウェアを長期間メンテナンスすることから学んだことは?

人が間違う可能性のあるあらゆることを学びました。自分自身の失敗や他人のコードから見つけたりしたものです。Vim が C で書かれていることは助けになりません。C では簡単に間違いを犯すことができます。現在のコンピューターはとても速くメモリもたくさんあるのでコンパイラーにプログラマーの手助けをして欲しいです。そのようなコンパイラを趣味のプロジェクトとして作っています。名前は Zimbu です。生成されるコードは例えばそれで Vim のようなものを書けるほど速いものです。

他に学んだことは、開発者は未来へのビジョンを持たなければならないということです。ユーザーはしばしば、簡単に追加できそうな小さな新機能をリクエストしてきます。一度に一つずつ機能を追加していくと、そしてその後の方向性を考えないでいると、後から追加された機能は簡単にはアクセスできないものになります。Vim の場合はすべてのコマンドは一つか二つのキーストロークに割り当てられています。キーが一つなら入力が簡単なので、それはよく使うコマンドのために取っておく必要があります。しかし将来、どのようなコマンドが追加されるのでしょうか? 私の推測ですが、それをビジョンと呼ぶことができるかもしれません。

例えば、word オブジェクトを追加するとき、二文字で “aw” とすることにしました。これは “a word” の意味です。一文字にすることもできましたが、後で他のオブジェクトも追加されるだろうことを私は知っていました。そして私達は今 “a paragraph” の意味の “ap” やその他のオブジェクトを持っています。もし “a” 自身が何かの機能に使われていたらこのようなことはできなかったでしょう。

2: 世界には Vim のような動作を提供するプラグインを持つテキストエディタがたくさんありますが、Vim と他のエディタではどのような違いを感じますか。別の言い方をすると、もし Vim が何かのチャンピオンだとすると、何のチャンピオンなのでしょうか?

Vim のコマンドを学び、日々の業務を効率よくこなすトリックを学びつづけるには投資が必要です。Vim が提供しているものは、あなたが学んだことはずっと使い続けることができる、という約束です。他のプログラムでは “新しい改善された” バージョンが出ると、機能はあちこちに移動し、あなたが再び効率的に仕事をできるようになるにはしばらく時間がかかります。Vim とその前身の Vi は標準で定義されています。すべてのコンピューターでそれが動き続けることを信じることができます。

3: Vim のデフォルトオプションは直感的ではないとしてしばしば批判されますが、もしすべてをやり直せるとしたらデフォルト設定や動作は変更しますか?

これは上で述べたことにも通じます: 一度に一つの機能を追加する。後から変更を加えるとき、特に機能を追加するときは、オプションを定義して新しい機能が後方互換性を壊さないようにする必要があるでしょう。例えば、マルチレベルアンドゥは “u” コマンドの動作を変えます。したがって、古い動作を無効化するためのオプションが必要になるのです。

変更したとしてもそれほど多くは変えなかったでしょう。マルチレベルアンドゥや構文強調表示や ‘nocompatible’ オプションによって変更されるものなど、もっと多くの機能をデフォルトで有効化したかもしれません。要するに $VIMRUNTIME/vimrc_example.vim に書いてあるようなことですね。

あるいは、多くのユーザーはそれぞれの期待を持っているでしょう。あるユーザーが他のユーザーも同じような期待を持っていると予想するのは簡単です。実際にはユーザーは多くの違った好みを持っています。最終的にデフォルト値を決定すると、そこには文句を言うユーザーが常に一定数いるのです。そのようなユーザー数がなるべく少なくなるように努力しています。

4: NeoVim の開発はおよそ 8 ヶ月に渡って続いています。NeoVim の勢いについてどのようにお考えですか?

さあ。最終目標に対していくつかの基本的な選択は奇妙で不適切に見えます。例えばあるシステムのサポートを切ったり後方互換性を維持していないことなどです。そのようなことをしなくてもうまく実装できたのではないでしょうか。

彼らは Vim の古いコードが嫌いでそれを “正しく” しようとしているように感じます。古いコードが醜いことには同意です。しかし新しく実装するには膨大な手間がかかるでしょう。これは Elvis に起こったことによく似ています: Elvis は再実装により改善を行いました。それは Vim が多くの機能拡張を行っている間も行われ続け、とても長い時間が費やされました。最終的には Elvis は非常に多くのユーザーを失ってしまいました。再実装された Elvis は良いコードで書かれているかもしれませんが、ユーザーはそのことに気付きません。

NeoVim から生じた良いものが Vim にも還元できたらと願っています。より良いプラグインサポートや改善された GUI、Vim の他のアプリケーションへの埋め込みを望まない人はいませんよね? 大きな問題は、それをどのようにきちんと実装するかです。

5: オープンソースプロジェクトを作ったりあるいは参加したりする人たちにアドバイスはありますか?

特には。どちらにしても良い目標を定めて、便利なコードを書いて、適切に宣伝するのは言うまでもありません。見た目の良いウェブサイトはとても役に立つでしょう。これは NeoVim がうまくやっていますね。

6: オープンソースソフトウェアを開発してきて、もうこりごりだという失敗はありますか。

例えば誰かからのコードを取り込んだとして、その人はそれが機能すると信じているし、問題が報告されればそれを修正してくれるでしょう。それはたいてい正しいし、信頼できるコントリビューターがたくさんいます。しかしときどき機能を入れたいだけの人がいて、使いたい機能が動くようになるとどこかへ消えてしまいます。そして、私が問題を修正するはめになるのです。

最近は、新しい機能を入れることにとても慎重になりました。それが複雑で既存コードの広範囲に及ぶ場合は特にです。何かを取り込む前にはテストとドキュメントを書くことをとても頻繁に要求しています。

7: オープンソースプロジェクトを持続可能にするにはどうするのが良い?

良いコードを書く。スペースを適切に使い、メソッドに良い名前を付け、明確でないことはなんでもコメントで説明する、などです。もしあなたがひどいコードを書いたら、他の誰かがバグを直したり機能を追加したりするのは楽ではないし、次にはほっとかれるでしょう。Vim がその好例ではないことを願います。

8: 将来に渡って Vim プロジェクトが継続することを Vim コミュニティーはどうやって保証するの?

私を生かせ続けよ。 :-)

9: チャリティーに力を入れている理由は? なぜチャリティーとして ICCF Holland を選んだのか、そしてあなたにとってなぜそれが重要なのか?

私たちは私たちが恵まれていることをよく忘れます。今日のワインはまずいとかウエイターの態度が悪いとか文句を言います。しかしそれはワインを買ったりディナーに出かけたりする余裕があるということです。それってすごくないですか? Vim を開発していたある期間に私は職に就いておらず、寄付を募っていました。再び職に就いたとき、その寄付金はそれを本当に必要としている人たちに送るのがいいのではと思いました。そして、Vim ユーザーも同じように考えていることがわかりました。

チャリティーはたくさんありますが、あなたが誰を助けるのかが明確ではない場合があります。寄付金のうちいくらが提供者の国に留まりますか? 運営や送金やその他の実際には助けようとしている人たちに渡らないお金はどれくらいですか? 私が働いていたある組織では、最終的に子供たちに渡るお金は集められたうちのたった 30% でした。頭の良い帳簿係がそれを 90% に見せかけていました。しかしほとんどはランドクルーザーでそこらをドライビングしているスタッフに渡りました。子供たちのいる小さな学校にではなくです。

私が Kibaale で出会ったプロジェクトはまったく違いました。そこで働いている外国人はボランティアであり、そこで暮らし働くことを可能にするために彼ら自身のスポンサーを持っています。子供たちへの寄付はすべてプロジェクトに送られ、そこで使われます。スタッフや乗り物にも使われますが、彼らは現地のスタッフであり、彼らのお金はその国で使われるので、間接的に他の人を助けています。そして最終的に、子供たちが成長し、勉強を終え、就職するのを見るのはすばらしいことです。

10: Vim の将来の予定は?

目を引くようなものはなにも。主に小さな改善をしていきます。いくつかの領域では大きな改善の見込みもあります。例えばプラグインを書いたり使ったりするのを簡単にするようなものです。しかしそれをどう実現するかは明確ではありません。それにプラグインマネージャーがその隙間をうまく埋めているようです。

しかし何が来るかはわかりません。例えば、undo ファイルの機能は “なくてもいいような” 機能に見えました。ある学生がしばらくの間その実装作業をすると、それを取り込むのはそんなに大変ではなくなりました。そして今では私は完全にその機能に頼っています。何か変更をして、ビルドして、テストをして、うまくいかなければそれを undo するのです。何か良いアイデアが浮かんでそれが実装されるという可能性は常にあります。


もどる