diff options
Diffstat (limited to 'mnv/runtime/ftplugin/markdown.mnv')
| -rw-r--r-- | mnv/runtime/ftplugin/markdown.mnv | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/mnv/runtime/ftplugin/markdown.mnv b/mnv/runtime/ftplugin/markdown.mnv new file mode 100644 index 0000000000..e66ef8037a --- /dev/null +++ b/mnv/runtime/ftplugin/markdown.mnv @@ -0,0 +1,93 @@ +" MNV filetype plugin +" Language: Markdown +" Maintainer: Tim Pope <https://github.com/tpope/mnv-markdown> +" Last Change: 2023 Dec 28 +" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring') + +if exists("b:did_ftplugin") + finish +endif + +runtime! ftplugin/html.mnv ftplugin/html_*.mnv ftplugin/html/*.mnv + +let s:keepcpo= &cpo +set cpo&mnv + +setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--\ %s\ --> +setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o +setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]:\\&^.\\{4\\} + +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= "|setl cms< com< fo< flp< et< ts< sts< sw<" +else + let b:undo_ftplugin = "setl cms< com< fo< flp< et< ts< sts< sw<" +endif + +if get(g:, 'markdown_recommended_style', 1) + setlocal expandtab tabstop=4 softtabstop=4 shiftwidth=4 +endif + +if !exists("g:no_plugin_maps") && !exists("g:no_markdown_maps") + nnoremap <silent><buffer> [[ :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR> + nnoremap <silent><buffer> ]] :<C-U>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR> + xnoremap <silent><buffer> [[ :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "bsW")<CR> + xnoremap <silent><buffer> ]] :<C-U>exe "normal! gv"<Bar>call search('\%(^#\{1,5\}\s\+\S\\|^\S.*\n^[=-]\+$\)', "sW")<CR> + let b:undo_ftplugin .= '|sil! nunmap <buffer> [[|sil! nunmap <buffer> ]]|sil! xunmap <buffer> [[|sil! xunmap <buffer> ]]' +endif + +function! s:NotCodeBlock(lnum) abort + return synIDattr(synID(a:lnum, 1, 1), 'name') !=# 'markdownCodeBlock' +endfunction + +function! MarkdownFold() abort + let line = getline(v:lnum) + + if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum) + return ">" . match(line, ' ') + endif + + let nextline = getline(v:lnum + 1) + if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1) + return ">1" + endif + + if (line =~ '^.\+$') && (nextline =~ '^-\+$') && s:NotCodeBlock(v:lnum + 1) + return ">2" + endif + + return "=" +endfunction + +function! s:HashIndent(lnum) abort + let hash_header = matchstr(getline(a:lnum), '^#\{1,6}') + if len(hash_header) + return hash_header + else + let nextline = getline(a:lnum + 1) + if nextline =~# '^=\+\s*$' + return '#' + elseif nextline =~# '^-\+\s*$' + return '##' + endif + endif +endfunction + +function! MarkdownFoldText() abort + let hash_indent = s:HashIndent(v:foldstart) + let title = substitute(getline(v:foldstart), '^#\+\s*', '', '') + let foldsize = (v:foldend - v:foldstart + 1) + let linecount = '['.foldsize.' lines]' + return hash_indent.' '.title.' '.linecount +endfunction + +if has("folding") && get(g:, "markdown_folding", 0) + setlocal foldexpr=MarkdownFold() + setlocal foldmethod=expr + setlocal foldtext=MarkdownFoldText() + let b:undo_ftplugin .= "|setl foldexpr< foldmethod< foldtext<" +endif + +let &cpo = s:keepcpo +unlet s:keepcpo + +" mnv:set sw=2: |
