単体テストなどのコードを書く際など、テスト対象関数名にtest_をつけた名前にしてお決まりのおまじないを書くことが結構多い気がしたので、vimscriptの勉強も兼ねて少し考えて見ました。
test_func_bodyの中身にテスト関数で共通で行う内容を入れておくと、便利かもしれません。
sample.vim
function! TestFunc(target_func)lets:test_func="test_".a:target_func
lets:test_func_body=[
\" printf(\"%s start\", __func__);",
\" printf(\"%s end\", __func__);",
\]
lets:i=0call append(line(".")+s:i,s:test_func."();")lets:i+=1call append(line(".")+s:i,"void ".s:test_func."(void)")lets:i+=1call append(line(".")+s:i,"{")lets:i+=1for item ins:test_func_body
call append(line(".")+s:i, item)lets:i+=1endforcall append(line(".")+s:i,"}")lets:i+=1endfunction
command!-nargs=1 UTFunc call TestFunc("<args>")
上記のサンプルの使い方は、テスト関数を作成したい場所にカーソルを移動して、そこで
UTFuncコマンドの引数にテスト対象関数を入れます。
例えば、sample関数のテスト関数を作成したい場合には、UTFunc sampleとすると
現在のカーソル位置に
sample.c
voidtest_sample(void){printf("%s start",__func__);printf("%s end",__func__);}
のように出力されます。