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

vital.vim 開発中

現在、チームで vital.vim と言うのを開発しています。ある程度形になってきたので、簡単に紹介。

vital.vim とは?

Vim プラグイン作者をサポートするための組み込み式のライブラリです。よって、プラグインを作らない人は知る必要はまったくないです。
Vim プラグインを書くとき、似たような関数を何度も書いたりしていませんか?
vital.vim は、このようなよく使う処理をライブラリ化し、自作したプラグインに簡単に組み込めるような仕組みを提供します。
ライブラリはプラグインに同梱されるので、ユーザにライブラリを入れてもらう必要がありません。

使い方

以下から最新版が取得できます。

https://github.com/ujihisa/vital.vim

取得は必ず git clone で行ってください。git 必須です。

vital を入手したら、中にある vitalize.rb を使って vital をプラグインに組み込みます。

ruby vitalize.rb {vital-dir} {plugin-dir}

vital が組み込まれたら、プラグインの任意の箇所で以下のようにして使うことができます。ここで、プラグイン名である "myplugin" は今のところプラグインが置かれているディレクトリの名前になります。

" 自分のプラグイン用の vital オブジェクトを取得する
let V = vital#of('myplugin')
" 'data/ordered_set' モジュールを O にインポート
let O = V.import('data/ordered_set')
" モジュールを使う
let set = O.new()

" もしくは
" 'data/ordered_set' モジュールを V 上にロード
call V.load('data/ordered_set')
" モジュールを使う
let set = V.data.ordered_set.new()

実際には vital#of() や import() はプラグインスクリプトのトップレベルで行って s:V などに格納することになると思います。

仕組み

vital は自身のバージョンを開発している git リポジトリでのコミット ID の先頭 6桁で管理しています。
プラグインへの組み込み時、vital はこのバージョン番号を使って以下のように配置されます。

myplugin/
`-- autoload/
    |-- vital/
    |   |-- _845f1a/
    |   |   |-- data/
    |   |   |   `-- ordered_set.vim
    |   |   |-- path.vim
    |   |   `-- prelude.vim
    |   |-- _845f1a.vim
    |   `-- myplugin.vital
    `-- vital.vim

myplugin.vital にバージョンを示す ID が入っています。
autoload/vital.vim の実装は不変で、vital#of() は .vital ファイルを読み取って適切なバージョンの vital を読み込みます。
これにより、違うバージョンの vital が複数プラグインで使われていても問題なく動作します。
また、複数プラグインで同じバージョンの vital を使っていた場合は 1 度だけしか読み込まないので、速度とメモリの面で少しだけ有利です。

Q & A

  • Q. 安定して使えるの?
  • A. まだまだ開発中で、仕様なども未確定部分が結構あります。
  • Q. git 必須?
  • A. インストールには必須です。ただし、プラグインを使うユーザはもちろん必要ないですし、あなたが開発しているプラグインが git で管理されている必要もありません。
  • Q. ruby 必須?
  • A. 今のところインストールには必須ですが、簡単な処理しかしていないので将来別言語での実装があるかもしれません。
  • Q. vitalize.rb でプラグイン名を指定するには?
  • A. 未実装ですが、恐らく近いうちに実装されると思います。
  • Q. どんなモジュールがあるの?
  • A. 実を言うと、現状では本体検証用の仮モジュールがあるくらいです。例えば上の例でも出ている ordered_set です。まったく使えないとは言えませんが、実質ほぼ使えません。モジュールの充実が今後の課題です。
  • Q. autoload/vital.vim が変更されたらどうなるの?
  • A. autoload/vital.vim は runtimepath 上の最初のものが読み込まれるため、全てのバージョンで同じである必要があります。正式版までには実装を fix する予定ですが、もし変更が必要になった場合は、読み込み方法自体を変更する可能性もあります。正式版までに変更されるかもしれません。
  • Q. 開発に参加したいんだけど?
  • A. 大歓迎です。是非以下までご連絡ください。
  • Q. VimJolts はどうなったの?
  • A. (∩゚Д゚) アーアー キコエナーイ

次回は vital モジュールの作り方について解説します。