17a329911SBram Moolenaar" Vim filetype plugin 27a329911SBram Moolenaar" Language: Markdown 37a329911SBram Moolenaar" Maintainer: Tim Pope <[email protected]> 4*c08ee747SBram Moolenaar" Last Change: 2019 Dec 05 57a329911SBram Moolenaar 67a329911SBram Moolenaarif exists("b:did_ftplugin") 77a329911SBram Moolenaar finish 87a329911SBram Moolenaarendif 97a329911SBram Moolenaar 107a329911SBram Moolenaarruntime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim 117a329911SBram Moolenaar 12*c08ee747SBram Moolenaarsetlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s--> 13543b7ef7SBram Moolenaarsetlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o 1489bcfda6SBram Moolenaarsetlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]: 157a329911SBram Moolenaar 16f1568ecaSBram Moolenaarif exists('b:undo_ftplugin') 17f1568ecaSBram Moolenaar let b:undo_ftplugin .= "|setl cms< com< fo< flp<" 18f1568ecaSBram Moolenaarelse 19f1568ecaSBram Moolenaar let b:undo_ftplugin = "setl cms< com< fo< flp<" 20f1568ecaSBram Moolenaarendif 217a329911SBram Moolenaar 22*c08ee747SBram Moolenaarfunction! s:NotCodeBlock(lnum) abort 23*c08ee747SBram Moolenaar return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode' 24*c08ee747SBram Moolenaarendfunction 25*c08ee747SBram Moolenaar 26*c08ee747SBram Moolenaarfunction! MarkdownFold() abort 2789bcfda6SBram Moolenaar let line = getline(v:lnum) 2889bcfda6SBram Moolenaar 29*c08ee747SBram Moolenaar if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum) 30*c08ee747SBram Moolenaar return ">" . match(line, ' ') 3189bcfda6SBram Moolenaar endif 3289bcfda6SBram Moolenaar 3389bcfda6SBram Moolenaar let nextline = getline(v:lnum + 1) 34*c08ee747SBram Moolenaar if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1) 3589bcfda6SBram Moolenaar return ">1" 3689bcfda6SBram Moolenaar endif 3789bcfda6SBram Moolenaar 38*c08ee747SBram Moolenaar if (line =~ '^.\+$') && (nextline =~ '^-\+$') && s:NotCodeBlock(v:lnum + 1) 3989bcfda6SBram Moolenaar return ">2" 4089bcfda6SBram Moolenaar endif 4189bcfda6SBram Moolenaar 4289bcfda6SBram Moolenaar return "=" 4389bcfda6SBram Moolenaarendfunction 4489bcfda6SBram Moolenaar 45*c08ee747SBram Moolenaarfunction! s:HashIndent(lnum) abort 46*c08ee747SBram Moolenaar let hash_header = matchstr(getline(a:lnum), '^#\{1,6}') 47*c08ee747SBram Moolenaar if len(hash_header) 48*c08ee747SBram Moolenaar return hash_header 49*c08ee747SBram Moolenaar else 50*c08ee747SBram Moolenaar let nextline = getline(a:lnum + 1) 51*c08ee747SBram Moolenaar if nextline =~# '^=\+\s*$' 52*c08ee747SBram Moolenaar return '#' 53*c08ee747SBram Moolenaar elseif nextline =~# '^-\+\s*$' 54*c08ee747SBram Moolenaar return '##' 55*c08ee747SBram Moolenaar endif 56*c08ee747SBram Moolenaar endif 57*c08ee747SBram Moolenaarendfunction 58*c08ee747SBram Moolenaar 59*c08ee747SBram Moolenaarfunction! MarkdownFoldText() abort 60*c08ee747SBram Moolenaar let hash_indent = s:HashIndent(v:foldstart) 61*c08ee747SBram Moolenaar let title = substitute(getline(v:foldstart), '^#\+\s*', '', '') 62*c08ee747SBram Moolenaar let foldsize = (v:foldend - v:foldstart + 1) 63*c08ee747SBram Moolenaar let linecount = '['.foldsize.' lines]' 64*c08ee747SBram Moolenaar return hash_indent.' '.title.' '.linecount 65*c08ee747SBram Moolenaarendfunction 66*c08ee747SBram Moolenaar 6789bcfda6SBram Moolenaarif has("folding") && exists("g:markdown_folding") 6889bcfda6SBram Moolenaar setlocal foldexpr=MarkdownFold() 6989bcfda6SBram Moolenaar setlocal foldmethod=expr 70*c08ee747SBram Moolenaar setlocal foldtext=MarkdownFoldText() 71*c08ee747SBram Moolenaar let b:undo_ftplugin .= " foldexpr< foldmethod< foldtext<" 7289bcfda6SBram Moolenaarendif 7389bcfda6SBram Moolenaar 747a329911SBram Moolenaar" vim:set sw=2: 75