Vim script初心者講座 vol.3

vim
最近やってみたことをまとめてみます。これは、Vim Advent Calendar 2013 の27日目の記事です。

photo-credit: syui


前回の Vim script 初心者講座 vol.2 の続きです。


今回は、 主に、vital.vimの使い方について紹介していく予定です。


目次



番号 タイトル
01 vital.vimの使い方
02 vital.vimの導入方法
03 vital.vimとは



vital.vimの使い方



まずはじめに、 vital.vim のモジュールを利用した Vim script を書いてみることにします。


参考プラグイン



vitalのモジュールを使った参考プラグインを作り、 GitHub にあげました。 vital.vim をインストールしていない環境でも動作します。

https://github.com/syui/vital-test.vim


NeoBundle 'syui/vital-test.vim'



:VitalPathTestコマンドを実行すると、値が返されると思います。


これは、環境がファイル名に対して寛容かどうかを bool 値で返すものです。


ちなみに、中身だけ見たい場合は、以下のコマンドを実行してください。

curl https://raw.github.com/syui/vital-test.vim/master/plugin/vital-test.vim



参考プラグインの解説



ここで、参考プラグインを作った手順を紹介します。


1. vital の autoload を置く

vital のモジュールを使うためには、プラグインディレクトリにモジュールを読み込む vital 用の autoload を置く必要があります。


まず、プラグインディレクトリに移動し、:VitalPathTest . System.Filepathコマンドを実行しました。


これは、以下の様なコマンドになります。

:Vitalize {path} {module}


これで、簡単な記述方式でモジュールが使えるようになります。


2. vital 用の記述方式

「vital-test.vim」は、「hoge」に置き換えました。あと、コメントも追加しましたので、参考プラグインとは多少変わっています。

" let s:V = vital#of("vital")
" let s:S = s:V.import("System.Filepath")

let $VIMRUNTIME_USER_VITAL = expand('<sfile>:p:h:h')
set runtimepath+=$VIMRUNTIME_USER_VITAL
let s:V = vital#of("hoge")
let s:S = s:V.import("System.Filepath")

function! s:vitaltest()
echo s:S.is_case_tolerant()
endfunction
command! VitalPathTest call s:vitaltest()



では、1つずつ記述の内容を解説していきたいと思います。





hogeの部分は、作成するプラグインが置いてあるディレクトリ(プラグイン名)を入れます。


runtimepathに追加する処理は、以下の部分になります。


let $VIMRUNTIME_USER_VITAL = expand('<sfile>:p:h:h')
set runtimepath+=$VIMRUNTIME_USER_VITAL



注意点としては、 vital とモジュールを指定する部分は、s:を付けてください。

let s:V = vital#of()
let s:S = s:V.import()

...

s:S.is_case_tolerant()



vital を単体で使う場合は、必要ありませんが、プラグインで使う場合は、必要になるみたいです。




モジュールの各種機能を呼び出す部分です。これは、単純に用意されたものを使います。


参考:
vital.vim/System.Filepath


ハマった点



1. vital.vim のインストール

NeoBundle 'vital.vim' ではインストールできなかった。


なので NeoBundle 'vim-jp/vital.vim'としましょう。


2. vital#of() の引数

vital#of() の引数(括弧の中に記述するもの)は、 vitalプラグイン名になります。


注意として、両者とも、自作プラグインのディレクトリに vital.vim の autoload を用意してる事が前提です。

:Vitalize {path} {module}


ここで、自作プラグインを ~/.vim/plugin/ フォルダに置く場合は、 vital.vim をインストールした上で、let s:V = vital#of("vital") と書いたら動きました。


反対に、自作プラグインをプラグイン管理している場合は、 vital.vim をインストールする必要はなく、 ~/.vim/bundle/に置き、let s:V = vital#of("プラグイン名") と書きます。


3. runtimepath に追加

autoload にある vital のモジュールを使いたい場合、自作プラグインのディレクトリを runtimepath(rtp) に追加する必要があります。


これは、 vital.vim に限らず、どのプラグインも同様です。


ちなみに、 NeoBundle などのプラグイン管理ツールを使用している場合は、 runtimepathを自動追加してくれますので、この処理(rtpの追加)は、必要ありません。


プラグインディレクトリを runtimepath に追加するには、以下のように書くと良い。

let $VIMRUNTIME_USER_VITAL = expand('<sfile>:p:h:h')
set runtimepath+=$VIMRUNTIME_USER_VITAL



これは、以下と同じような内容です。

set runtimepath+=~/.vim/plugin/hoge



vital.vimの導入方法



プラグイン作者は、 vital.vimをインストールしてください。


NeoBundle 'vim-jp/vital.vim'


:so $VIMRC | NeoBundleInstall


そして、自分が作るプラグインを置いたフォルダを :Vitalize {path}コマンドで指定します。


自分が作るプラグインを ~/.vim/plugin/hogeフォルダに置いたとします。


この場合は、以下のようなコマンドを実行することになります。

:Vitalize ~/.vim/plugin/hoge {module}


ここで、 {module}には、使用するモジュールを指定します。使用できるモジュールは、 こちらの記事を参考にしてください。


これで、当該フォルダに、 autoload ディレクトリが作られ、そこに vital ディレクトリや vital.vim が作られます。


この状態になると、プラグインフォルダ内に置いたファイルで特定の書き方をすると vital.vim のライブラリ(モジュール)を使えるようになります。


ちなみに、当該プラグインを単体で使用する場合は、以下のよう設定します。

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



vital.vimとは



Vim Pluginを作るというのは、通常、元から使える材料がいくつか用意されていて、それを使って、作ることになります。


ここでいう材料というのは、Vimが元から用意してくれている変数だったり、関数だったりするわけです。


これらの材料は、ライブラリと呼ばれることがあります。


しかし、元から用意されている材料では作りたいものが作れないことがあります。


そんな時は、材料自体を自分で用意しなければなりません。


しかし、これは、非常に面倒で時間のかかる作業です。


また、独自の判断に基づいて作られた材料だけあって、副作用の心配なども大きくなります。


そこで、便利な材料をまとめて用意し、それをプラグインに取り込みやすくするために vital.vim というプラグインが便利です。


今後、 vital.vim に便利なモジュールが増えていくと嬉しいですね。


この記事は、vital を使ってみた上での個人的な理解を元に解説されています。したがって、間違っている可能性もありますので注意してください。


参考:
vital.vim チュートリアル