X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/fd74fcdff5cf237083beb93a7f7f1c5657c8dfa5..899ef40d3c84192e3c6c0b512a40d9e42a8bb3dd:/ftplugin/markdown.vim?ds=sidebyside diff --git a/ftplugin/markdown.vim b/ftplugin/markdown.vim index 1ce35a8..c2fff46 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 @@ -347,11 +357,11 @@ function! s:Toc(...) endif endif endfor + call setloclist(0, l:header_list) if len(l:header_list) == 0 echom "Toc: No headers." return endif - call setloclist(0, l:header_list) if l:window_type ==# 'horizontal' lopen @@ -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. @@ -446,11 +456,16 @@ function! s:TableFormat() " Search instead of `normal! j` because of the table at beginning of file edge case. call search('|') normal! j - " Remove everything that is not a pipe othewise well formated tables would grow - " because of addition of 2 spaces on the separator line by Tabularize /|. + " Remove everything that is not a pipe, colon or hyphen next to a colon othewise + " well formated tables would grow because of addition of 2 spaces on the separator + " line by Tabularize /|. let l:flags = (&gdefault ? '' : 'g') - execute 's/[^|]//' . l:flags + execute 's/\(:\@