教 vim 使用 foldexpr 折叠类似 RStudio 的部分

Teaching vim to fold RStudio-like sections using foldexpr

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

栏目

这些部分相当简单,对应于包含一组单词和 --- 符号的文本块,直到 80 个字符,如下图所示:

有关这些部分如何工作的更多信息可用 here

问题

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

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

正则表达式

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

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

regex101

这似乎可以解决问题:

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 文件时自动对其求值。如果您想详细了解它的工作原理以及您可以添加的其他内容 "features",请尝试阅读 :help fold-expr.