教 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,}
这似乎可以解决问题:
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
.
我想让 vim
符合 rstudio
-like 部分,并通过 foldexpr
为这些文本块启用折叠.
栏目
这些部分相当简单,对应于包含一组单词和 ---
符号的文本块,直到 80 个字符,如下图所示:
有关这些部分如何工作的更多信息可用 here。
问题
如何在 vim 中构建 foldexpr
以便它识别格式的一部分:
# Word word ... ------------------------
正则表达式
正则表达式匹配部分的格式可以是:
\#[[:blank:]]([[:word:]]|[[:blank:]]){1,}\-{1,}
这似乎可以解决问题:
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
.