X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/271939ed66546ac99cf45dd4dd9025303f7004fd..71f171736fb549352c04e19e27632a230964dce2:/ftplugin/mkd.vim diff --git a/ftplugin/mkd.vim b/ftplugin/mkd.vim index 4e9f448..07f81db 100644 --- a/ftplugin/mkd.vim +++ b/ftplugin/mkd.vim @@ -294,6 +294,39 @@ function! b:Markdown_MoveToPreviousSiblingHeader() endif endfunction +function! b:Markdown_Toc(...) + if a:0 > 0 + let l:window_type = a:1 + else + let l:window_type = 'vertical' + endif + silent vimgrep '^#' % + if l:window_type ==# 'horizontal' + copen + elseif l:window_type ==# 'vertical' + vertical copen + let &winwidth=(&columns/2) + elseif l:window_type ==# 'tab' + tab copen + else + copen + endif + set modifiable + %s/\v^([^|]*\|){2,2} #// + for i in range(1, line('$')) + let l:line = getline(i) + let l:header = matchstr(l:line, '^#*') + let l:length = len(l:header) + let l:line = substitute(l:line, '\v^#*[ ]*', '', '') + let l:line = substitute(l:line, '\v[ ]*#*$', '', '') + let l:line = repeat(' ', (2 * l:length)) . l:line + call setline(i, l:line) + endfor + set nomodified + set nomodifiable + normal! gg +endfunction + " Wrapper to do move commands in visual mode. " function! s:VisMove(f) @@ -308,11 +341,34 @@ function! s:MapNormVis(rhs,lhs) execute 'vn ' . a:rhs . ' :call VisMove(''' . a:lhs . ''')' endfunction -call MapNormVis(']]', 'b:Markdown_MoveToNextHeader') -call MapNormVis('[[', 'b:Markdown_MoveToPreviousHeader') -call MapNormVis('][', 'b:Markdown_MoveToNextSiblingHeader') -call MapNormVis('[]', 'b:Markdown_MoveToPreviousSiblingHeader') + +call MapNormVis('(Markdown_MoveToNextHeader)', 'b:Markdown_MoveToNextHeader') +call MapNormVis('(Markdown_MoveToPreviousHeader)', 'b:Markdown_MoveToPreviousHeader') +call MapNormVis('(Markdown_MoveToNextSiblingHeader)', 'b:Markdown_MoveToNextSiblingHeader') +call MapNormVis('(Markdown_MoveToPreviousSiblingHeader)', 'b:Markdown_MoveToPreviousSiblingHeader') " Menmonic: Up -call MapNormVis(']u', 'b:Markdown_MoveToParentHeader') +call MapNormVis('(Markdown_MoveToParentHeader)', 'b:Markdown_MoveToParentHeader') " Menmonic: Current -call MapNormVis(']c', 'b:Markdown_MoveToCurHeader') +call MapNormVis('(Markdown_MoveToCurHeader)', 'b:Markdown_MoveToCurHeader') + +if ! exists('g:vim_markdown_no_default_key_mappings') +\ || !g:vim_markdown_no_default_key_mappings + nmap ]] (Markdown_MoveToNextHeader) + nmap [[ (Markdown_MoveToPreviousHeader) + nmap ][ (Markdown_MoveToNextSiblingHeader) + nmap [] (Markdown_MoveToPreviousSiblingHeader) + nmap ]u (Markdown_MoveToParentHeader) + nmap ]c (Markdown_MoveToCurHeader) + + vmap ]] (Markdown_MoveToNextHeader) + vmap [[ (Markdown_MoveToPreviousHeader) + vmap ][ (Markdown_MoveToNextSiblingHeader) + vmap [] (Markdown_MoveToPreviousSiblingHeader) + vmap ]u (Markdown_MoveToParentHeader) + vmap ]c (Markdown_MoveToCurHeader) +endif + +command! -buffer Toc call b:Markdown_Toc() +command! -buffer Toch call b:Markdown_Toc('horizontal') +command! -buffer Tocv call b:Markdown_Toc('vertical') +command! -buffer Toct call b:Markdown_Toc('tab')