public
Created

Markdown folding for Vim

  • Download Gist
markdown.vim
VimL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
" folding for Markdown headers, both styles (atx- and setext-)
" http://daringfireball.net/projects/markdown/syntax#header
"
" this code can be placed in file
" $HOME/.vim/after/ftplugin/markdown.vim
 
" In Markdown, setext-style overrides atx-style, so we first check for an
" underline. Empty lines should be ignored when underlined.
func! Foldexpr_markdown(lnum)
let l1 = getline(a:lnum)
if l1 =~ '^\s*$'
return '='
endif
let l2 = getline(a:lnum+1)
if l2 =~ '^=\+\s*$'
return '>1'
elseif l2 =~ '^-\+\s*$'
return '>2'
elseif l1 =~ '^#'
return '>'.matchend(l1, '^#\+')
else
return '='
endif
endfunc
setl foldexpr=Foldexpr_markdown(v:lnum)
setl foldmethod=expr
 
"---------- everything after this is optional -----------------------
" change the following fold options to your liking
" see ':help fold-options' for more
setl foldenable
setl foldlevel=0
setl foldcolumn=0
 
" text of closed fold
" shows the first line as is, plus fold level and the number of hidden lines
setl foldtext=getline(v:foldstart).'\ \ \ /'.v:foldlevel.'...'.(v:foldend-v:foldstart)
 
"-------- other buffer- and window-local settings to override defaults
" setl wrap list

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.