vital.vim の Prelude モジュールを使ってみた その1
- @see 勝手にvital.vim API Reference
- 最新版のソース: https://github.com/vim-jp/vital.vim/blob/master/autoload/vital/__latest__/prelude.vim
- @see Vital.vim をインストールした - vim 初心者の作業メモ
:Vitalize [options] {target-dir} [{module} ...] *:Vitalize* {target-dir} is root directory of your plugin. It must be like a one of 'runtimepath'. List of {module} is module names you want. If omitted, all modules are included. The Prelude module(|Vital.Prelude|) is always included.https://github.com/vim-jp/vital.vim/blob/master/doc/vitalizer.txt
Prelude モジュールは, 基本モジュール(というか, なんというか...)なので Vitalize すると必ずインストールされるもの.
- しかしヘルプがない
- is_xxx とか system 関係はどんどん使えばいいと思う.
- その1ででてこない関数たちはよくわからん状態. そのうち書けたら書く
型チェック関数
is_numeric(Value)
- NUMBER または FLOAT のときに真を返す.
:let V = vital#of('vital') :echo V.is_numeric(1) " ==> 1 :echo V.is_numeric(0.5) " ==> 1 :echo V.is_numeric('hoge') " ==> 0
is_integer(Value)
- NUMBER と同じ.
- なぜ同じ動作をする関数が複数あるんだろう.
:let V = vital#of('vital') :echo V.is_integer(1) " ==> 1 :echo V.is_integer(0.5) " ==> 0 :echo V.is_integer('hoge') " ==> 0
is_number(Value)
- NUMBER(整数)のときに真を返す.
- is_integer() も同じ結果
:let V = vital#of('vital') :echo V.is_number(1) " ==> 1 :echo V.is_number(0.5) " ==> 0 :echo V.is_number('hoge') " ==> 0
is_float(Value)
- FLOAT(小数)のときに真を返す.
:let V = vital#of('vital') :echo V.is_float(1) " ==> 0 :echo V.is_float(0.5) " ==> 1 :echo V.is_float('hoge') " ==> 0
is_string(Value)
- 文字列のときに真を返す.
:let V = vital#of('vital') :echo V.is_string(1) " ==> 0 :echo V.is_string(0.5) " ==> 0 :echo V.is_string('hoge') " ==> 1 :echo V.is_string([]) " ==> 0 :echo V.is_string([1,2,3]) " ==> 0 :echo V.is_string({}) " ==> 0
is_list(Value)
- Value がリストのときに真を返す.
:let V = vital#of('vital') :echo V.is_list(1) " ==> 0 :echo V.is_list(0.5) " ==> 0 :echo V.is_list('hoge') " ==> 0 :echo V.is_list([]) " ==> 1 :echo V.is_list([1,2,3]) " ==> 1 :echo V.is_list({}) " ==> 0
is_dict(Value)
- Value が dictionary のときに真を返す.
:let V = vital#of('vital') :echo V.is_dict(1) " ==> 0 :echo V.is_dict(0.5) " ==> 0 :echo V.is_dict('hoge') " ==> 0 :echo V.is_dict([]) " ==> 0 :echo V.is_dict([1,2,3]) " ==> 0 :echo V.is_dict({}) " ==> 1
is_funcref(Value)
- vim 力がないので使い道が良く分からない.
function! g:hogefunc() echo 'hoge' endfunction :let V = vital#of('vital') :echo V.is_funcref(1) " ==> 0 :echo V.is_funcref(0.5) " ==> 0 :echo V.is_funcref('hoge') " ==> 0 :echo V.is_funcref([]) " ==> 0 :echo V.is_funcref([1,2,3]) " ==> 0 :echo V.is_funcref({}) " ==> 0 ":echo V.is_funcref(echo) " ==> E121 ":echo V.is_funcref(g:hogefunc) " ==> E128 :echo V.is_funcref(function('tr')) " ==> 1
メッセージ出力関数
print_error(message)
- ":echohl ErrorMsg" してメッセージを出力する
:let V = vital#of('vital') :call V.print_error('hello!')
外部コマンド実行
system(str{, input{, timeout}})
- 外部コマンドを実行する
- vimproc のヘルプ参照
- str 実行するコマンド文字列
- input コマンドに渡す文字列. built-in 関数 system の第2引数
- timeout タイムアウト. vimproc 時のみ有効
:let V = vital#of('vital') :call V.system("ls /tmp")
get_last_status()
V.system で実行したコマンドの復帰値を返す.
:let V = vital#of('vital') :call V.system("ls /tmp") :echo V.get_last_status() " ==> 0 :call V.system("ls /nonexist_directory") :echo V.get_last_status() " ==> 2
has_vimproc()
vimproc が実行可能であれば真.
-
- vital.vim 利用者は V.system を呼べば良いだけなので、これは使うことないと思う.
:let V = vital#of('vital') :echo V.has_vimproc() " ==> 1
追記(2012/11/17)
Shougo
http://lingr.com/room/vim/archives/2012/11/16
いや、vimprocに依存したプラグインを書く場合はあったほうが良いです
vimprocはsystem()のためにあるわけではないし
iconv
iconv(expr, from, to)
- iconv のラッパ
- " iconv() wrapper for safety." とコメントに書いてあるがどう safety なのかわからない.
- 「変換できなかった場合には '' ではなく、入力 expr が復帰する」ところが safety?
:let V = vital#of('vital') :echo '[' . iconv('', '', '') . ']' " ==> [] :echo '[' . iconv('hoge', '', '') . ']' " ==> [hoge] :echo '[' . iconv('てすと', '', '') . ']' " ==> [てすと] :echo '[' . iconv('てすと', 'hoge', '') . ']' " ==> [てすと] :echo '[' . V.iconv('てすと', '', '') . ']' " ==> [てすと]
追記(2012/11/17)
Shougo
http://lingr.com/room/vim/archives/2012/11/16
そう。あとは、multibyte対応のVimでないときでも文字列が壊れないところ
これは以外に考慮から漏れがち
使ったことないからわからないけど, multibyte 非対応ならそもそも表示できないんじゃないのかな??