Vim - プラグインまたはVim scriptを書く楽しさについて語りたい

この記事はVim Advent Calendar 2013の31日目です。
前日はmanga_osyoさんの来年も使いたい Vim プラグインランキング2013でした。

はじめに

この記事ではVimプラグイン、またはVim scriptを書く楽しさについて語ります。
Vim script楽しいので書いてみませんか、という内容になっています。

概要

この記事は主に以下の内容で構成されています。

  • 自分がプラグインを書くようになった経緯
  • そこから体験したプラグインを書く楽しさ
  • プラグインを書く上での気持ち的なハードルに関して
  • 最初の一歩を踏み出すための参考

想定している読者

Vimを使っているけどVim scriptを書いたことはない。
または書いたことあるけどプラグインを作ったことはない。
そういうVimmerを対象としています。

Vimプラグインに限らず、まだ個人で何も作り上げたことがない人を特に対象としています。

具体的なコードは出てきませんのでVim scriptについての知識は必要はありません。

自分がプラグインを書くようになった経緯

私の記憶が確かならば、初めて読んだプラグインはこちらになります。

サラリーマンの為のメールが2倍速く書ける(気がする)vim補完書いた

この記事を当時読んだときに、何となくGithubのリンクを開きました。
まずはフォルダが1つしかないことに驚きました。
次にその中にファイルが1つしかないことに驚きました。
最後にそのファイルの中身が61行しかないことに驚きました。

当時、プログラムとはもっと複雑で大きい必要があると思っていた私には衝撃でした。
(Vimプラグインに限らず)個人で何か作ろうとしては挫折していたことが多かったですが、
こんな小さくてもいいという事実は「自分でもできそう」という可能性を示してくれました。

それから少しして、私は初めてのプラグインを作りました。

そのあとも今日に至るまで、数は少ないですがいくつかプラグインを作ってきました。
今後も作っていきたいと思っています。
このモチベーションはどこから来ているのでしょうか。

プラグインを作る楽しさ

簡単に作れることが楽しさに繋がっていると考えています。
どういうあたりが簡単かを列挙してみます。

小さくてもいい

繰り返しになりますが、「数十行しかなくてもプラグインは作れる」という事実は重要でした。
この事実により、面倒臭がりで腰が重い私でも「やってみよう」という気になります。

短い期間で完成する

これは小さくて済むことに関連しますが、慣れてくれば物によっては数時間で1つ完成できます。
モチベーションは時間が経つほどに減少していくことが自然ですので、
完成までの期間が短いというのは楽しさに影響します。
(もちろん最初は色々調べながらなので、ある程度の時間はかかるでしょう)

Vimで完結する(外部ライブラリ/コマンドを使わなければ)

Vim scriptはVim上で動くので、Vimがあればすぐに始められます。
DBとかサーバーとかいりません。
大抵は外部ライブラリに依存しないで書けるので、
ライブラリ選定などに時間を取られることもありません。

書いて動かして確認する。すべてがVimだけで行われます。

構成とか考えなくてもいい

これは厳密には「プラグイン」ではありませんが、
vimrcに記述するだけでも構わないのは手軽です。
このあたりは後ほど触れます。

Webアプリに比べて覚えることが少ない

Vim scriptを覚えるだけです。
マルチスレッドとかも考える必要がありません。

公開が簡単

プラグインの配布方法はいくつかありますが、
そのうちの一つとしてGithubに公開するだけで済むのがとても簡単です。

あとはプラグインや拡張設定を書くと、
自分で自分のVimを育てている感じがして、Vimに対する愛着が強まります。

この通りプラグインを書くことは手軽に出来て楽しいわけですが、
中にはプラグインにするほどのネタがなくて書けないという人もいるかもしれません。

書くネタが浮かばない

個人的な経験になりますが最初の一歩に関しては、
アイデアが降ってくるのを待っていてはいつまでも書けません。
まずは既存プラグインの真似事でも何か作ってみて、
「作った」という体験をする必要があります。

作った経験があると、日々の中で割とアイデアが湧くようになると思います。
少なくとも私は湧くようになりました。
何かの技術ネタを見ると「これVimでも出来ないかな」と考えたり、
誰かの「こういうことがしたい」という発言を聞いてVimでやるには...と考えるようになります。

昔の私がそうでしたが、「浮かばない」という人は大抵自分で可能性を狭めています。

思いついたアイデアが既にプラグインとしてあってもいいと思います。
まったく実用的じゃなくても全然構わないでしょう。
自分の手で何かを作るというのは、それだけで楽しいです。

Vimとは関係ありませんが、先日見たすばらしいツイートを引用します。

すでに他に同じようなプラグインがあっても、実用的じゃなくても気にしない。
それでも浮かばないなら何でもいいから真似てみる。
むしろ既存であるネタの方が、困ったときに参考に出来て初学に向いている気もします。

では、実際に作り始めるとしてどうすればいいでしょうか。

最初の一歩のおすすめ

私は4パターンをご提案します。

vimrcにまず書いてみる

まずはvimrcに書いておいて、プラグインにできそうなら後でプラグイン化しましょう。
始めからプラグインを意識する必要はありません。
このあたりは前述のVimプラグインが出来るまでという記事に書きました。

小さいものから始める

前述のmattnさんのプラグインのように数十行で終わるような簡単なものから始めると、
挫折する可能性が低くていいのではないでしょうか。

プラグインのプラグインを作る

例えばunite.vimはsourceという形でuniteのプラグインを作れます。
雰囲気を掴むためにこちらの記事がとても参考になりました。
簡単な unite の source の作り方
なお、これは現在ではunite.vimに標準で組み込まれている機能です。(linesではなくてlineという名前で)

これをもとにとりあえず動かしてみたときの私のツイートがこちら。

(記事中の順番が前後しますが、これを経て作成したのが前述の初プラグインです)

さらに詳しい記事としてはこちらもあります。
unite-source を作成する流れをまとめてみた

また、ctrlpもプラグインを作れます。
Vimプラグインの拡張機能プラグインを作ってVimをさらに使いやすくしよう

他にもプラグインのプラグインを作れるものはあります。
その中でも日本語の情報量からunite sourceは取っ付きやすいのではと思います。
ただ、確か私のころはuniteの日本語ヘルプがあったような気がしますが、
今は英語のみなのでその点は敷居が高いかもしれません。

メリットとして例えばunite sourceなら、既存のunite sourceプラグインを参考にすることができます。

既存プラグインに依存する(少しレベル高いかも)

既存プラグインのAPIを利用すると、難しい処理を簡単に書けます。
ただし使い方を説明した記事はほとんどなく、
ヘルプを理解したり内部コードを見る必要があります。
そのため少し敷居が高いと思われます。

メリットとして、同じように依存している他のプラグインを参考にすることができます。

書くに際してもっと具体的な参考情報について

このAdvent Calendar初日に素晴らしい記事があがっていますので、そちらをご覧ください。
Vim を使っている/始めたいなら読んでおきたい Web の記事

終わりに

私がVim scriptに手を出してハイになっていた頃のツイートを並べます。
少しでもこの楽しさが伝われば幸いです。

今年もVimmerとして多くの方々に助けて頂きました。ありがとうございます。
来年もみなさんが素敵なVimライフを過ごせますように。
よいお年を。