X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/fd74fcdff5cf237083beb93a7f7f1c5657c8dfa5..7ef40b4cc5f95752bdf3def42d67c3b1c0da7409:/ftplugin/markdown.vim diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 1ce35a8..4019ff9 100644 --- a/ftplugin/markdown.vim +++ b/ftplugin/markdown.vim @@ -304,6 +304,8 @@ function! s:Toc(...) let l:bufnr = bufnr('%') + let l:cursor_line = line('.') + let l:cursor_header = 0 let l:fenced_block = 0 let l:front_matter = 0 let l:header_list = [] @@ -340,6 +342,14 @@ function! s:Toc(...) " append line to location list let l:item = {'lnum': i, 'text': l:line, 'valid': 1, 'bufnr': l:bufnr, 'col': 1} let l:header_list = l:header_list + [l:item] + " set header number of the cursor position + if l:cursor_header == 0 + if i == l:cursor_line + let l:cursor_header = len(l:header_list) + elseif i > l:cursor_line + let l:cursor_header = len(l:header_list) - 1 + endif + endif " keep track of the longest header size (heading level + title) let l:total_len = stridx(l:line, ' ') + len(l:line) if l:total_len > l:header_max_len @@ -390,7 +400,7 @@ function! s:Toc(...) endfor setlocal nomodified setlocal nomodifiable - normal! gg + execute 'normal! ' . l:cursor_header . 'G' endfunction " Convert Setex headers in range `line1 .. line2` to Atx. @@ -606,7 +616,8 @@ command! -buffer Toct call s:Toc('tab') " Heavily based on vim-notes - http://peterodding.com/code/vim/notes/ let s:filetype_dict = { \ 'c++': 'cpp', - \ 'viml': 'vim' + \ 'viml': 'vim', + \ 'bash': 'sh' \ } function! s:MarkdownHighlightSources(force) @@ -620,6 +631,10 @@ function! s:MarkdownHighlightSources(force) if !exists('b:mkd_known_filetypes') let b:mkd_known_filetypes = {} endif + if !exists('b:mkd_included_filetypes') + " set syntax file name included + let b:mkd_included_filetypes = {} + endif if !a:force && (b:mkd_known_filetypes == filetypes || empty(filetypes)) return endif @@ -635,7 +650,12 @@ function! s:MarkdownHighlightSources(force) let filetype = ft endif let group = 'mkdSnippet' . toupper(substitute(filetype, "[+-]", "_", "g")) - let include = s:SyntaxInclude(filetype) + if !has_key(b:mkd_included_filetypes, filetype) + let include = s:SyntaxInclude(filetype) + let b:mkd_included_filetypes[filetype] = 1 + else + let include = '@' . toupper(filetype) + endif let command = 'syntax region %s matchgroup=%s start="^\s*```%s$" matchgroup=%s end="\s*```$" keepend contains=%s%s' execute printf(command, group, startgroup, ft, endgroup, include, has('conceal') ? ' concealends' : '') execute printf('syntax cluster mkdNonListItem add=%s', group)