Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

この記事は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日目の記事でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした