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