Vim/DokuWiki用折りたたみ

Vim/DokuWiki用折りたたみ

Vim/PukiWiki用折りたたみに続き、作ってみた。そのうち全体をプラグイン化したいな。 どうやってやるかまだよく知らんけど

au FileType dokuwiki setlocal foldmethod=expr foldexpr=DokuWikiFold(v:lnum)
function! DokuWikiFold(lnum)
  " まず現在行とその前後を取得する
  let prev = getline(a:lnum - 1)
  let line = getline(a:lnum)
  let next = getline(a:lnum + 1)
  " 現在行が見出しだったら折りたたみレベル操作をしない
  " 見出しが連続していた場合無茶苦茶にならないように先に書く
  if line =~ '^=\{5\}[^=]\+=\{5\}$' ||
     line =~ '^=\{4\}[^=]\+=\{4\}$' ||
     line =~ '^=\{3\}[^=]\+=\{3\}$' ||
    return '='
  endif
 
  " 前の行がh2見出しの開始を意味していたら
  " 折りたたみレベル1を開始する
  if prev =~ '^=\{5\}[^=]\+=\{5\}$'
    return 1
  endif
  " 次の行がh2見出しの開始を意味していたら
  " 折りたたみレベル1を終了する
  if next =~ '^=\{5\}[^=]\+=\{5\}$'
    return '<1'
  endif
  " 同様にh3
  if prev =~ '^=\{4\}[^=]\+=\{4\}$'
    return 2
  endif
  if next =~ '^=\{4\}[^=]\+=\{4\}$'
    return '<2'
  endif
  " 同様にh4
  if prev =~ '^=\{3\}[^=]\+=\{3\}$'
    return 3
  endif
  if next =~ '^=\{3\}[^=]\+=\{3\}$'
    return '<3'
  endif
  " それ以外の行の場合は前の行と同じ折りたたみレベルに所属させる
  return '='
endfunction

バージョン

2012-06-16 新規

タグ

editor/vim/dokuwiki_fold.txt · 最終更新: 2017-09-27 10:48 by ore