" For each level, contains the regexp that matches at that level only.
let s:levelRegexpDict = {
- \ 1: '\v^(\s*#[^#]|.+\n\=+$)',
- \ 2: '\v^(\s*##[^#]|.+\n-+$)',
- \ 3: '\v^\s*###[^#]',
- \ 4: '\v^\s*####[^#]',
- \ 5: '\v^\s*#####[^#]',
- \ 6: '\v^\s*######[^#]'
+ \ 1: '\v^(#[^#]|.+\n\=+$)',
+ \ 2: '\v^(##[^#]|.+\n-+$)',
+ \ 3: '\v^###[^#]',
+ \ 4: '\v^####[^#]',
+ \ 5: '\v^#####[^#]',
+ \ 6: '\v^######[^#]'
\ }
" Maches any header level of any type.
" This could be deduced from `s:levelRegexpDict`, but it is more
" efficient to have a single regexp for this.
"
-let s:headersRegexp = '\v^(\s*#|.+\n(\=+|-+)$)'
+let s:headersRegexp = '\v^(#|.+\n(\=+|-+)$)'
" Returns the line number of the first header before `line`, called the
" current header.
else
let l:window_type = 'vertical'
endif
- silent vimgrep '^#' %
+
+ try
+ silent vimgrep /\(^\S.*\(\n[=-]\+\)\@=\|^#\+\)/ %
+ catch /E480/
+ echom "Toc: No headers."
+ return
+ endtry
+
if l:window_type ==# 'horizontal'
copen
elseif l:window_type ==# 'vertical'
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)
+ " this is the quickfix data for the current item
+ let d = getqflist()[i-1]
+ " atx headers
+ if match(d.text, "^#") > -1
+ let l:level = len(matchstr(d.text, '#*', 'g'))-1
+ let d.text = substitute(d.text, '\v^#*[ ]*', '', '')
+ let d.text = substitute(d.text, '\v[ ]*#*$', '', '')
+ " setex headers
+ else
+ let l:next_line = getbufline(bufname(d.bufnr), d.lnum+1)
+ if match(l:next_line, "=") > -1
+ let l:level = 0
+ elseif match(l:next_line, "-") > -1
+ let l:level = 1
+ endif
+ endif
+ call setline(i, repeat(' ', l:level). d.text)
endfor
set nomodified
set nomodifiable
" Menmonic: Current
call <sid>MapNormVis('<Plug>(Markdown_MoveToCurHeader)', '<sid>Markdown_MoveToCurHeader')
-if ! exists('g:vim_markdown_no_default_key_mappings')
-\ || !g:vim_markdown_no_default_key_mappings
- nmap ]] <Plug>(Markdown_MoveToNextHeader)
- nmap [[ <Plug>(Markdown_MoveToPreviousHeader)
- nmap ][ <Plug>(Markdown_MoveToNextSiblingHeader)
- nmap [] <Plug>(Markdown_MoveToPreviousSiblingHeader)
- nmap ]u <Plug>(Markdown_MoveToParentHeader)
- nmap ]c <Plug>(Markdown_MoveToCurHeader)
+if !get(g:, 'vim_markdown_no_default_key_mappings', 0)
+ nmap <buffer> ]] <Plug>(Markdown_MoveToNextHeader)
+ nmap <buffer> [[ <Plug>(Markdown_MoveToPreviousHeader)
+ nmap <buffer> ][ <Plug>(Markdown_MoveToNextSiblingHeader)
+ nmap <buffer> [] <Plug>(Markdown_MoveToPreviousSiblingHeader)
+ nmap <buffer> ]u <Plug>(Markdown_MoveToParentHeader)
+ nmap <buffer> ]c <Plug>(Markdown_MoveToCurHeader)
- vmap ]] <Plug>(Markdown_MoveToNextHeader)
- vmap [[ <Plug>(Markdown_MoveToPreviousHeader)
- vmap ][ <Plug>(Markdown_MoveToNextSiblingHeader)
- vmap [] <Plug>(Markdown_MoveToPreviousSiblingHeader)
- vmap ]u <Plug>(Markdown_MoveToParentHeader)
- vmap ]c <Plug>(Markdown_MoveToCurHeader)
+ vmap <buffer> ]] <Plug>(Markdown_MoveToNextHeader)
+ vmap <buffer> [[ <Plug>(Markdown_MoveToPreviousHeader)
+ vmap <buffer> ][ <Plug>(Markdown_MoveToNextSiblingHeader)
+ vmap <buffer> [] <Plug>(Markdown_MoveToPreviousSiblingHeader)
+ vmap <buffer> ]u <Plug>(Markdown_MoveToParentHeader)
+ vmap <buffer> ]c <Plug>(Markdown_MoveToCurHeader)
endif
command! -buffer Toc call s:Markdown_Toc()