代码之家  ›  专栏  ›  技术社区  ›  Konrad

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

  •  1
  • Konrad  · 技术社区  · 8 年前

    我想做 vim 尊敬 rstudio -喜欢 节和启用这些文本块的折叠 foldexpr .

    小节

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

    RStudio sections as available on www.rstudio.com

    Mor:关于各部分如何工作的信息可用 here .

    问题

    我该如何建造 折叠 在vim中,它识别一段格式:

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

    正则表达式

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

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

    regex101

    1 回复  |  直到 8 年前
        1
  •  2
  •   Andrew Radev    8 年前

    这似乎起到了作用:

    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文件时自动评估。如果您想了解更多关于它为什么工作以及您可以添加哪些其他“功能”的信息,请尝试阅读 :help fold-expr .