Vim折叠,没有结束标记

gge*_*ise 5 vim

我想在开始标记之间折叠文本:

//// Block 1

... some code 1 ...

//// Block 2

... some code 2 ...
Run Code Online (Sandbox Code Playgroud)

在此处////将用作开始标记,并且折叠//// Block 1将折叠到之前的行//// Block 2

这有可能吗?

如果我foldmarker没有设置结束参数就不喜欢它,并且如果////同时用作开始和结束标记,它会折叠太多。

我可以使用手动创建折叠zf,但是这些折叠取决于文件,如果您更改它,它们会折断。

enr*_*cis 3

您可以像这样编写自己的折叠表达式:

function! BlockFolds()
   let thisline = getline(v:lnum)
   if match(thisline, '^\/\/\/\/ Block') >= 0
      return ">1"
   else
      return "="
   endif
endfunction

setlocal foldmethod=expr
setlocal foldexpr=BlockFolds()
Run Code Online (Sandbox Code Playgroud)

如果你在 vim 中获取它,你将得到想要的效果:

演示

.vimrc显然,您可以在您的或基于文件扩展名中获取它。您可以在此处了解自定义折叠表达式的工作原理:http ://vimcasts.org/episodes/writing-a-custom-fold-expression/