在vim中自动编码代码块

时间:2016-02-20 22:28:12

标签: vim

我的代码库中有很多单元测试,如果我可以自动折叠它们会很好。

单元测试的结构是

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块中使用{}

我如何指示折叠应该在单元测试块的最后}之后结束?

1 个答案:

答案 0 :(得分:1)

  

此代码存在一些问题,unittest块的右括号}不在内部。

我现在无法测试,但将return "0"语句更改为return "s1"可能有所帮助。

  

我也不能使用zA打开所有折叠,我不知道为什么。

当您在Vim中输入:h zA时,您会发现zA未打开所有折叠。要打开所有折叠,请按zR(关闭所有zM)。

  

此外,我可能无法在unittest块中使用{或}。

您应该能够在unittest块中使用这些括号。 match(thisline, '^}') >= 0仅在行的第一列出现结束括号时才为真 - 如果使用空格则不是这种情况。此语句中的hat(^)是一个正则表达式,表示代码行的开头。

对于此代码,唯一不适用的是,如果您在同一级别拥有unittest { ...}以外的内容。如果您只对文件使用unittest,那么您应该没问题。