我的代码库中有很多单元测试,如果我可以自动折叠它们会很好。
单元测试的结构是
unittest{
//...
}
我以前从未在vimscript中写过,但我设法得到了大致有效的东西
function! UnittestFold()
let thisline = getline(v:lnum)
if match(thisline, '^unittest') >= 0
return ">1"
endif
if match(thisline, '^}') >= 0
return "0"
endif
return "="
endfunction
setlocal foldmethod=expr
setlocal foldexpr=UnittestFold()
此代码存在一些问题,unittest块的右括号}
不在内部。
我也无法使用zA
打开所有折叠,我不知道为什么。 No folds found
我认为问题是我为每个结束括号设置了foldlevel为0。另外,我可能无法在unittest块中使用{
或}
。
我如何指示折叠应该在单元测试块的最后}
之后结束?
答案 0 :(得分:1)
此代码存在一些问题,unittest块的右括号}不在内部。
我现在无法测试,但将return "0"
语句更改为return "s1"
可能有所帮助。
我也不能使用zA打开所有折叠,我不知道为什么。
当您在Vim中输入:h zA
时,您会发现zA
未打开所有折叠。要打开所有折叠,请按zR
(关闭所有zM
)。
此外,我可能无法在unittest块中使用{或}。
您应该能够在unittest块中使用这些括号。 match(thisline, '^}') >= 0
仅在行的第一列出现结束括号时才为真 - 如果使用空格则不是这种情况。此语句中的hat(^
)是一个正则表达式,表示代码行的开头。
对于此代码,唯一不适用的是,如果您在同一级别拥有unittest { ...}
以外的内容。如果您只对文件使用unittest,那么您应该没问题。