摘要即可。如何(以及如果?)我可以获得vim折叠以自动将截面标题行之前找到的asciidoc [id='']
行与为该部分创建的折叠相关联?
详细信息即可。 asciidoc内容允许节标题标识(除其他外,映射到呈现的HTML-anchor-tag名称并且还允许文档内交叉引用),否则已知(我认为?)为{{ 3}}。但是,[id='']
行blurb必须在之前放置到节标题行,即使它是该节的一部分。例如:
[id='under_construction', reftext='Under Construction']
## DISCLAIMER: This Document is Under Construction
这使得asciidoc文件的vim-fold更难管理,因为折叠部分移动“丢失”前一行(并且所有部分id
都被洗牌),因为在眼中vim fold,前一行属于上一节。
答案 0 :(得分:1)
我不确定如何使用asciidoc进行vim折叠,但我认为新部分以##开头(或者==,从简短的角度来判断你提供的链接),并且[id = ...]提供额外的关于该部分的信息。
因此,您可以查看Steve Losh's markdown folding和:h fold-expr
。
所以这里是降价折叠的修改代码:
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
作为此文件类型的自动命令。