Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 1 | " Vim filetype plugin |
| 2 | " Language: Markdown |
| 3 | " Maintainer: Tim Pope <vimNOSPAM@tpope.org> |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 4 | " Last Change: 2019 Dec 05 |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 5 | |
| 6 | if exists("b:did_ftplugin") |
| 7 | finish |
| 8 | endif |
| 9 | |
| 10 | runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 11 | |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 12 | setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=<!--%s--> |
Bram Moolenaar | 543b7ef | 2013-06-01 14:50:56 +0200 | [diff] [blame] | 13 | setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 14 | setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+\\\|^\\[^\\ze[^\\]]\\+\\]: |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 15 | |
Bram Moolenaar | f1568ec | 2011-12-14 21:17:39 +0100 | [diff] [blame] | 16 | if exists('b:undo_ftplugin') |
| 17 | let b:undo_ftplugin .= "|setl cms< com< fo< flp<" |
| 18 | else |
| 19 | let b:undo_ftplugin = "setl cms< com< fo< flp<" |
| 20 | endif |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 21 | |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 22 | function! s:NotCodeBlock(lnum) abort |
| 23 | return synIDattr(synID(v:lnum, 1, 1), 'name') !=# 'markdownCode' |
| 24 | endfunction |
| 25 | |
| 26 | function! MarkdownFold() abort |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 27 | let line = getline(v:lnum) |
| 28 | |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 29 | if line =~# '^#\+ ' && s:NotCodeBlock(v:lnum) |
| 30 | return ">" . match(line, ' ') |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 31 | endif |
| 32 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 33 | let nextline = getline(v:lnum + 1) |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 34 | if (line =~ '^.\+$') && (nextline =~ '^=\+$') && s:NotCodeBlock(v:lnum + 1) |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 35 | return ">1" |
| 36 | endif |
| 37 | |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 38 | if (line =~ '^.\+$') && (nextline =~ '^-\+$') && s:NotCodeBlock(v:lnum + 1) |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 39 | return ">2" |
| 40 | endif |
| 41 | |
| 42 | return "=" |
| 43 | endfunction |
| 44 | |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 45 | function! s:HashIndent(lnum) abort |
| 46 | let hash_header = matchstr(getline(a:lnum), '^#\{1,6}') |
| 47 | if len(hash_header) |
| 48 | return hash_header |
| 49 | else |
| 50 | let nextline = getline(a:lnum + 1) |
| 51 | if nextline =~# '^=\+\s*$' |
| 52 | return '#' |
| 53 | elseif nextline =~# '^-\+\s*$' |
| 54 | return '##' |
| 55 | endif |
| 56 | endif |
| 57 | endfunction |
| 58 | |
| 59 | function! MarkdownFoldText() abort |
| 60 | let hash_indent = s:HashIndent(v:foldstart) |
| 61 | let title = substitute(getline(v:foldstart), '^#\+\s*', '', '') |
| 62 | let foldsize = (v:foldend - v:foldstart + 1) |
| 63 | let linecount = '['.foldsize.' lines]' |
| 64 | return hash_indent.' '.title.' '.linecount |
| 65 | endfunction |
| 66 | |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 67 | if has("folding") && exists("g:markdown_folding") |
| 68 | setlocal foldexpr=MarkdownFold() |
| 69 | setlocal foldmethod=expr |
Bram Moolenaar | c08ee74 | 2019-12-05 22:47:25 +0100 | [diff] [blame] | 70 | setlocal foldtext=MarkdownFoldText() |
| 71 | let b:undo_ftplugin .= " foldexpr< foldmethod< foldtext<" |
Bram Moolenaar | 89bcfda | 2016-08-30 23:26:57 +0200 | [diff] [blame] | 72 | endif |
| 73 | |
Bram Moolenaar | 7a32991 | 2010-05-21 12:05:36 +0200 | [diff] [blame] | 74 | " vim:set sw=2: |