我不确定vim如何折叠asciidoc,但我假设新部分以##(或==,从您提供的链接的简要介绍来看)开始,并且[id=...]提供了关于部分。所以你可以看看Steve Losh 的降价折叠和:h fold-expr
. 所以这里是markdown折叠的修改代码:
function! Fold_askiidoc(lnum)
let l1 = getline(a:lnum)
if l1 =~ '^\s*$'
" assume sections are separated by blank lines
return '0'
endif
" check next line
let l2 = getline(a:lnum+1)
if l2 =~ '^#'
" next line starts with hashes (or '=', or any symbol)
" number of hashes specifies indent level
return '>'.matchend(l2, '^#\+')
else
" otherwise keep previous foldlevel
return '='
endif
endfunction
setlocal foldexpr=Fold_test(v:lnum)
setlocal foldmethod=expr
它检查每一行,如果它是空白的,假设它是一个部分的结尾。如果下一行以 # 开头,则表示折叠从当前行开始。# 的数量指定折叠级别。它会在节标题之前折叠任何非空行,如果您只希望它用于特定行,例如 id=[''],则必须添加额外的字符串比较。
您可以将其保存到$HOME/.vim/after/ftplugin/asciidoc.vim
. 我不确定文件类型是否存在,或者您必须单独创建它。每次打开特定文件时,它都应该从那里自动加载。或者您可以将函数放入您的文件中vimrc
并指定 setlocal foldexpr=Fold_test(v:lnum) setlocal foldmethod=expr 作为此文件类型的自动命令。