我已经编写了一个有效的简单脚本,但我正在寻找更好的实现。
这是我的理想情景。我坐在一个包含许多测试的测试文件中:
def test_cleans_number
number = PhoneNumber.new("(123) 456-7890").number
assert_equal "1234567890", number
end
def test_cleans_a_different_number
number = PhoneNumber.new("(987) 654-3210").number
assert_equal "9876543210", number
end
def test_cleans_number_with_dots
number = PhoneNumber.new("456.123.7890").number
assert_equal "4561237890", number
end
我已经编写了这个vim脚本,它允许我将光标放在测试的定义行上,它将只运行该测试和测试:
function! RunNearestTest()
let line = getline('.')
let test_name = substitute(line, 'def ', "", "g")
exec ":!ruby " . @% . " -n " . test_name
endfunction
" run test runner
map <leader>T :call RunNearestTest()<cr>
如果脚本中不明显,我需要测试名称才能专门运行该测试。在第一个示例中,测试名称为test_cleans_number
。
正如我所说,这很好但我想做的就是在测试中的任何一行,它会知道跳到上一个def
,得到test_name
然后运行执行。我认为searchpair()
会成为我的转到此,但是我无法找到足够的文档。
我很高兴在此提供您可能需要的任何文件或附加内容,谢谢!
答案 0 :(得分:3)
search()
函数返回匹配行的编号:
function! RunNearestTest()
let line_text = getline(search('def ', 'bcW'))
let test_name = substitute(line_text, 'def ', "", "g")
exec ":!ruby " . @% . " -n " . test_name
endfunction
请参阅:help search()
。