t9md:
if Check1()
throw "ERROR"
endifこういうチェックをいっぱいやる場合に
http://lingr.com/room/vim/archives/2013/11/03#message-17268337
Check1() && throw "ERROR"
Check2() && throw "ERROR"
をやりたんですが、出来ない。
manga_osyo:
function! Check1()
return 1
endfunctionfunction! Check2()
return 1
endfunctioncommand! -nargs=* Checker if
| throw "ERROR" | endif
Checker Check1()
Checker Check2()こうするのが楽かなぁ。ただし、スクリプトローカル関数は使えないけども
もしくは
function! s:throw(exp)
throw a:exp
endfunctionlet _ = Check1() && s:throw("ERROR")
let _ = Check2() && s:throw("ERROR")
とか書くのは前者の方が楽、使い勝手は後者の方が楽
後者なら
function! s:checker(check, ...)
let expr = get(a:, 1, "ERROR")
if a:check
throw expr
endif
endfunctioncall s:checker(Check1())
http://lingr.com/room/vim/archives/2013/11/03#message-17268353
call s:checker(Check2(), "ERROR Check2")
の方が楽そげ感
Lindan:
スクリプトローカルなコマンドが定義できれば ThrowIf {condition} みたいなコマンドを自作するのも良さそうだけれど…コマンド名,グローバルにしか定義できないので,他のプラグインとかぶらないようにしないといけないのが辛いですね…
http://lingr.com/room/vim/archives/2013/11/03#message-17268374
t9md:
http://lingr.com/room/vim/archives/2013/11/03#message-17268401
これまでは、if cond | hoge | endif を一行にして、Alignしてたけど。
後者もいい。 osyo さん、サンクスです。
便利メモにメモっとこう。
そもそもの目的は、textmanip でもうやることがない(動かせない)ときのチェックをスッキリ書きたかった。
https://github.com/t9md/vim-textmanip/blob/master/autoload/textmanip.vim#L154-L173
http://lingr.com/room/vim/archives/2013/11/03#message-17268438
コマンドを使った方法を経て
最終的にこうなっていました(結局関数を使った方法に)