X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/2918519dd2c4e22223533e3f6f4823cf05784fb1..9041a939364442c5ece81bde677a675fb9884429:/indent/markdown.vim diff --git a/indent/markdown.vim b/indent/markdown.vim index 3f89b5c..103e160 100755 --- a/indent/markdown.vim +++ b/indent/markdown.vim @@ -18,41 +18,52 @@ setlocal comments+=b:> " Only define the function once if exists("*GetMarkdownIndent") | finish | endif -function! s:is_mkdCode(lnum) - return synIDattr(synID(a:lnum, 1, 0), 'name') == 'mkdCode' +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:is_li_start(line) +function! s:IsLiStart(line) return a:line !~ '^ *\([*-]\)\%( *\1\)\{2}\%( \|\1\)*$' && \ a:line =~ '^\s*[*+-] \+' endfunction -function! s:is_blank_line(line) +function! s:IsHeaderLine(line) + return a:line =~ '^\s*#' +endfunction + +function! s:IsBlankLine(line) return a:line =~ '^$' endfunction -function! s:prevnonblank(lnum) +function! s:PrevNonBlank(lnum) let i = a:lnum - while i > 1 && s:is_blank_line(getline(i)) + while i > 1 && s:IsBlankLine(getline(i)) let i -= 1 endwhile return i endfunction function GetMarkdownIndent() - let list_ind = 4 + 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 = prevnonblank(v:lnum - 1) + 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:is_li_start(cline) + if s:IsLiStart(cline) " Current line is the first line of a list item, do not change indent return indent(v:lnum) - elseif s:is_li_start(line) - if s:is_mkdCode(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