vital.vimをどんどん使っていこう。

  • 77
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

この記事はVim Advent Calendar 2013 : ATND 3日目の記事になります。

Vim Advent Calendar 2013の(私の投稿の)1回目ということで、今回はvital.vimについて現時点での状況をまとめてみたいと思います。

vital.vimとは

vital.vimは、Vimプラグインの作成する際に必要になるだろう関数をまとめたライブラリ群です。
もちろん、Vimプラグインの作成だけでなく、通常のVim scriptを書くときにも使うことが出来ます。

https://github.com/vim-jp/vital.vim

vital.vimの構成

vital.vimには色んなモジュールがあります。vital.vimではライブラリのことをモジュールと呼びます。
2013年12月2日の時点で、vital.vimには全36個のモジュールが存在します。

  • Bitwise
    ビットを扱う演算を行うためのモジュールです。

  • Data.Base64
    Vim scriptからBase64を扱うためのモジュールです。

  • Data.Collection
    Vim scriptからコレクションを扱うためのモジュールです。

  • Data.Dict
    辞書操作に関するモジュールです。

  • Data.LazyList
    リスト操作に関するモジュールです。(遅延評価版)

  • Data.List
    リスト操作に関するモジュールです。

  • Data.OrderedSet
    順序あり重複なしの集合を扱うためのモジュールです。

  • Data.String
    Vim scriptの文字列に関するモジュールです。

  • Data.Tree
    木構造を扱うためのモジュールです。

  • Database.SQLite
    Vim scriptからSQLiteを扱うためのモジュールです。

  • DateTime
    日付・時刻に関するモジュールです。

  • Experimental.Functor
    関数オブジェクトを操作するためのモジュールです。

  • Locale.Message
    簡単にロケールに合わせたメッセージに切り替えるためのモジュールです。

  • Mapping
    キーマッピングに関するモジュールです。

  • Math
    数学的な演算を行うためのモジュールです。

  • OptionParser
    コマンドオプションを解析するモジュールです。

  • Prelude
    各モジュール内で使われる汎用的な関数を集めた標準モジュールです。

  • Process
    プロセスを扱うためのモジュールです。

  • ProcessManager
    プロセスを管理するためのモジュールです。

  • Random.Xor128
    疑似乱数を生成するためのモジュールです。

  • System.Cache
    キャッシングを簡単に扱うためのモジュールです。

  • System.File
    ファイル操作を扱うためのモジュールです。

  • System.Filepath
    ファイルパスを扱うためのモジュールです。

  • Text.CSV
    CSVファイルを扱うためのモジュールです。

  • Text.Lexer
    文字列を字句解析するためのモジュールです。

  • Text.LTSV
    LTSV(Labeled Tab Separated Values)とVim scriptの辞書を相互変換するモジュールです。

  • Text.Parser
    Text.Lexerモジュールに特化したパーサーです。

  • Vim.Buffer
    バッファを扱うためのモジュールです。

  • Vim.BufferManager
    バッファ管理するためのモジュールです。

  • Vim.Compat
    Vimのバージョンを扱うためのモジュールです。

  • Vim.Message
    任意のハイライトでechoするのに特化したモジュールです。

  • Web.HTML
    HTMLをVim scriptの辞書へ変換するためのモジュールです。

  • Web.HTTP
    HTTP通信を行うためのモジュールです。

  • Web.JSON
    JSON(JavaScript Object Notation)とVim scriptの辞書を相互変換するモジュールです。

  • Web.URI
    URIを扱うためのモジュールです。

  • Web.XML
    XMLをVim scriptの辞書へ変換するためのモジュールです。

vital.vimの特徴

vital.vimは、単体で使用することももちろん可能ですが、vital.vimはプラグインに任意のモジュールを埋め込むことも出来ます。
埋め込むことによって何の利点があるかというと、まず、vital.vimに依存しないプラグインを作成することが出来ます。
ここでいう「依存」とはvital.vim本体をruntimepathに含める必要がないという意味です。
よって、プラグインユーザーはvital.vim本体をインストールする必要がありません。
もう1つは、複数のプラグインにあるモジュールを、それぞれ別のリビジョンを使って使用することが出来ます。
欠点としましては、個々のプラグインに同じモジュールが重複してしまったりするので、プラグインの総サイズが若干多くなってしまいます。

vital.vimの使い方

単体で使用する場合

vital.vimは単体でも使用する事が出来ます。
今回は簡単なので単体プラグインとして使用する例を示します。

まず、vital.vimをインストールしてruntimepathに含めましょう。

set runtimepath+=~/.vim/bundle/vital.vim

実際に使うには、

let s:V = vital#of('vital')

let s:Prelude = s:V.import('Prelude')
let s:List = s:V.import('Data.List')

let d = { 'A' : 1, 'C' : 3 }
echo string(d)
" { 'A' : 1, 'C' : 3 }
call s:Prelude.set_dictionary_helper(d,"A,B,C",0)
echo string(d)
" { 'A' : 1, 'B' : 0, 'C' : 3 }

let lst = [[1],[2,3]]
echo s:List.flatten(lst)
" [1,2,3]
echo lst
" [[1],[2,3]]
echo s:List.flatten([[1],[2,[3,4]]])
" [1,2,3,4]

のように使います。

単体で使用する場合には、vital#of()の引数は必ず'vital'になります。
で次に、使いたいモジュールをlet s:Prelude = s:V.import('Prelude')のような感じでvital#of()の引数にモジュール名を指定します。
モジュールを使う方法はs:V.import('Prelude')の方法以外にもありますが、今回は省略します。
s:V.import()の戻り値はそのモジュールのインスタンスです。
このインスタンスは、そのモジュールで定義されている関数がメンバとなる辞書になります。
なので、s:List.flatten([[1],[2,[3,4]]])のようなドット記表で呼び出すことが出来ます。

プラグインで使用する場合

vital.vimをプラグインで使用する場合にはちょっとした手間が必要になります。
仮に、ホームディレクトリにhogeというプラグインを作成するとします。

  • まず、ディレクトリを作成しそのディレクトリに移動します。
:call mkdir(expand('~/hoge'))
:lcd ~/hoge
  • そしたら、Vitalizeコマンドを使用して、埋め込みたいモジュールを指定します。
:Vitalize . Data.List  Web.URI

この例ではhogeというプラグインにData.ListとWeb.URIを埋め込みます。
.は埋め込みたいプラグインのパスを指定します。

  • 実際に、埋め込んだモジュールを使用するには以下のようにします。
" ~/hoge/autoload/hoge.vim

let s:V = vital#of('hoge')

let s:List = s:V.import('Data.List')

function! hoge#foo()
  return s:List.flatten([[1],[2,[3,4]]])
endfunction

vital#of()の引数がプラグイン名に変わっただけですね、簡単です。
あとは単体の場合と同じように使うことが出来ます。

終わりに

とりあえずこれで以上になりますが、今回がvital#of()の引数に指定の仕方がわからないというのをどっか聞いたので、これに焦点を当てて説明してみました。

以上、Vim Advent Calendar 2013 : ATND 3日目の記事でした。