diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2019-12-31 14:08:15 +0100 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2019-12-31 14:08:15 +0100 | 
| commit | a60e299a3ce55b4a84a48b240d35c84e6e5a8746 (patch) | |
| tree | 6d45e51ff3f7889ffc7a4499af0034806ffb7397 /indent | |
| parent | b8a5504021e0d21310bc603855ac8107828b5759 (diff) | |
| download | vim-polyglot-a60e299a3ce55b4a84a48b240d35c84e6e5a8746.tar.gz vim-polyglot-a60e299a3ce55b4a84a48b240d35c84e6e5a8746.zip | |
Switch back to plasticboy for markdown
Diffstat (limited to 'indent')
| -rw-r--r-- | indent/markdown.vim | 79 | 
1 files changed, 79 insertions, 0 deletions
| diff --git a/indent/markdown.vim b/indent/markdown.vim new file mode 100644 index 00000000..fa797312 --- /dev/null +++ b/indent/markdown.vim @@ -0,0 +1,79 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'markdown') == -1 + +if exists("b:did_indent") | finish | endif +let b:did_indent = 1 + +setlocal indentexpr=GetMarkdownIndent() +setlocal nolisp +setlocal autoindent + +" Automatically continue blockquote on line break +setlocal formatoptions+=r +setlocal comments=b:> +if get(g:, "vim_markdown_auto_insert_bullets", 1) +    " Do not automatically insert bullets when auto-wrapping with text-width +    setlocal formatoptions-=c +    " Accept various markers as bullets +    setlocal comments+=b:*,b:+,b:- +endif + +" Only define the function once +if exists("*GetMarkdownIndent") | finish | endif + +function! s:IsMkdCode(lnum) +    let name = synIDattr(synID(a:lnum, 1, 0), 'name') +    return (name =~ '^mkd\%(Code$\|Snippet\)' || name != '' && name !~ '^\%(mkd\|html\)') +endfunction + +function! s:IsLiStart(line) +    return a:line !~ '^ *\([*-]\)\%( *\1\)\{2}\%( \|\1\)*$' && +      \    a:line =~ '^\s*[*+-] \+' +endfunction + +function! s:IsHeaderLine(line) +    return a:line =~ '^\s*#' +endfunction + +function! s:IsBlankLine(line) +    return a:line =~ '^$' +endfunction + +function! s:PrevNonBlank(lnum) +    let i = a:lnum +    while i > 1 && s:IsBlankLine(getline(i)) +        let i -= 1 +    endwhile +    return i +endfunction + +function GetMarkdownIndent() +    if v:lnum > 2 && s:IsBlankLine(getline(v:lnum - 1)) && s:IsBlankLine(getline(v:lnum - 2)) +        return 0 +    endif +    let list_ind = get(g:, "vim_markdown_new_list_item_indent", 4) +    " Find a non-blank line above the current line. +    let lnum = s:PrevNonBlank(v:lnum - 1) +    " At the start of the file use zero indent. +    if lnum == 0 | return 0 | endif +    let ind = indent(lnum) +    let line = getline(lnum)    " Last line +    let cline = getline(v:lnum) " Current line +    if s:IsLiStart(cline) +        " Current line is the first line of a list item, do not change indent +        return indent(v:lnum) +    elseif s:IsHeaderLine(cline) && !s:IsMkdCode(v:lnum) +        " Current line is the header, do not indent +        return 0 +    elseif s:IsLiStart(line) +        if s:IsMkdCode(lnum) +            return ind +        else +            " Last line is the first line of a list item, increase indent +            return ind + list_ind +        end +    else +        return ind +    endif +endfunction + +endif | 
