1

总结。我如何(如果?)如何获得 vim 折叠以自动将在节标题行之前找到的asciidoc [id='']行与为该节创建的折叠关联?

详情asciidoc内容支持部分标题识别(除其他外,映射到呈现的 HTML 锚标记名称,还支持文档内交叉引用),也称为(我认为?)作为块标识符。但是,[id='']行简介必须放在节标题行之前,即使它是节的一部分。例如:

[id='under_construction', reftext='Under Construction']
## DISCLAIMER: This Document is Under Construction

这使得 asciidoc 文件的 vim 折叠更难管理,因为 folded-section 移动“丢失”前一行(并且所有 section 都id被打乱了),因为在 vim 折叠的眼中,前一行属于上一节。

4

1 回答 1

1

我不确定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 作为此文件类型的自动命令。

于 2015-05-04T02:47:12.617 回答