我正在尝试为大型降价文件创建一种简单、快速的折叠方法。我正在使用fold-expr
vim中的方法。例如,如果我想开始折叠H1
和H2
降价条目,我的 vimscript 代码是:
function! MarkdownLevel()
if getline(v:lnum) =~ '^# '
" begin a fold of level one here
return ">1"
elseif getline(v:lnum) =~ '^## '
" begin a fold of level two
return ">2"
else
return "="
endif
endfunction
这完美地工作,我得到嵌套折叠。但是,当我有一个大的降价文件时,vim 会大大减慢。这并不奇怪,事实上,在 vim 中的 fold-expr 帮助中已经说明了这一点。这是因为该=
符号告诉 vim 在文件中向后扫描,直到可以找到具有明确定义的折叠级别的第一行;这可能是数千行之外。
我试图用
else
" set foldlevel to foldlevel of previous line
return foldlevel(v:lnum-1)
endif
但这并没有按预期工作。有谁知道如何解决这一问题?很明显,我不了解 foldlevel 函数是如何工作的,或者 vim 中的折叠算法是如何实现的。