我最近一直在使用D并使用Vim作为编辑器。我处理的代码有很多内联单元测试,我想折叠这些,所以我只能看到代码。 Vim中的fold表达式需要自动折叠这些单元测试吗?
以下是D代码中的示例:
T getUnixTime(T, A...)(A args)
{
return to!T(SysTime(DateTime(args)).toUnixTime());
}
unittest
{
assert(getUnixTime!string(2013, 7, 18, 14, 49, 43) == "1374155383");
assert(getUnixTime!uint(2071, 12, 5, 12, 9, 5) == 3216542945);
}
我希望看起来像这样:
T getUnixTime(T, A...)(A args)
{
return to!T(SysTime(DateTime(args)).toUnixTime());
}
+-- 5 lines: unittest----------------------------------------------------------
答案 0 :(得分:2)
您在寻找“foldexpression”还是“折叠命令”?
假设光标位于unittest
,您可以
zf/{/e
创建折叠。
使其成为更快速的映射。
答案 1 :(得分:0)
很抱歉迟到了。我一直在寻找相同的功能,最终想出了这个:
set foldexpr=DlangUnitTestFold(v:lnum)
" If the line matches `unittest {`, increase the indentation.
" Keep the indentation level steady until we encounter a line
" that only matches `}`: if so, decrease the indentation.
function! DlangUnitTestFold(lnum)
if getline(a:lnum) =~ '^\s*unittest\s{\s*$'
return "a1"
elseif getline(a:lnum) =~ '^\s*}\s*$'
return "s1"
else
return "="
endif
endfunction
不确定它是否太过于hacky,但它对我有用:)
修改:理想情况下,您将第一行放在setlocal中,例如:
au BufNewFile,BufRead *.d setlocal foldexpr=DlangUnitTestFold(v:lnum)