使用foldexpr

时间:2016-12-26 10:11:46

标签: regex vim syntax comments folding

我想让vim尊重rstudio -like 部分,并通过foldexpr为这些文本块启用折叠。

这些部分非常简单,对应于带有一组单词和 --- 符号的文本块,直到80个字符,如下所示:

RStudio sections as available on www.rstudio.com

有关这些部分如何运作的信息,可以使用here

问题

如何在vim中构建foldexpr,以便识别格式的一部分:

# Word word ... ------------------------

正则表达式

正则表达式匹配部分的格式可以是:

\#[[:blank:]]([[:word:]]|[[:blank:]]){1,}\-{1,}

regex101

1 个答案:

答案 0 :(得分:2)

这似乎可以解决问题:

set foldmethod=expr
set foldexpr=RFoldexpr(v:lnum)

function! RFoldexpr(lnum)
  if getline(a:lnum) =~ '^#\s\(\w\+\s\+\)\+-\+$'
    " Start a new level-one fold
    return '>1'
  else
    " Use the same foldlevel as the previous line
    return '='
  endif
endfunction

将它放在文件~/.vim/ftplugin/r.vim中应该在加载R文件时自动评估它。如果您想了解更多关于它的工作原理以及其他什么特性和#34;您可以添加,尝试阅读:help fold-expr