let l1 = getline(a:lnum)
if l1 =~ '^#' && !s:is_mkdCode(a:lnum)
" fold level according to option
- let l:level = matchend(l1, '^#\+')
- if s:vim_markdown_folding_level == 1 || l:level > s:vim_markdown_folding_level
- return -1
+ if s:vim_markdown_folding_level == 1 || matchend(l1, '^#\+') > s:vim_markdown_folding_level
+ if a:lnum == line('$')
+ return matchend(l1, '^#\+') - 1
+ else
+ return -1
+ endif
else
" headers are not folded
return 0
endif
if l0 =~ '^#' && !s:is_mkdCode(a:lnum-1)
- " current line starts with hashes
+ " previous line starts with hashes
return '>'.matchend(l0, '^#\+')
else
" keep previous foldlevel
let b:front_matter = 0
let s:vim_markdown_folding_level = get(g:, "vim_markdown_folding_level", 1)
-if !get(g:, "vim_markdown_folding_disabled", 0)
- setlocal foldexpr=Foldexpr_markdown(v:lnum)
- setlocal foldmethod=expr
- if get(g:, "vim_markdown_folding_style_pythonic", 0)
- setlocal foldtext=Foldtext_markdown()
- endif
-endif
+function! s:MarkdownSetupFolding()
+ if !get(g:, "vim_markdown_folding_disabled", 0)
+ setlocal foldexpr=Foldexpr_markdown(v:lnum)
+ setlocal foldmethod=expr
+ if get(g:, "vim_markdown_folding_style_pythonic", 0) && get(g:, "vim_markdown_override_foldtext", 1)
+ setlocal foldtext=Foldtext_markdown()
+ endif
+ endif
+endfunction
+call s:MarkdownSetupFolding()
+augroup Mkd
+ " These autocmds need to be kept in sync with the autocmds calling
+ " s:MarkdownRefreshSyntax in ftplugin/markdown.vim.
+ autocmd BufWinEnter,BufWritePost <buffer> call s:MarkdownSetupFolding()
+ autocmd InsertEnter,InsertLeave <buffer> call s:MarkdownSetupFolding()
+ autocmd CursorHold,CursorHoldI <buffer> call s:MarkdownSetupFolding()
+augroup END