let l:window_type = 'vertical'
endif
- try
- silent lvimgrep /\(^\S.*\(\n[=-]\+\n\)\@=\|^#\+\)/ %
- catch /E480/
+
+ let b:bufnr = bufnr('%')
+ let b:fenced_block = 0
+ let b:header_list = []
+ let l:header_max_len = 0
+ for i in range(1, line('$'))
+ let l:lineraw = getline(i)
+ let l:l1 = getline(i+1)
+ let l:line = substitute(l:lineraw, "#", "\\\#", "g")
+ if l:line =~ '````*' || l:line =~ '\~\~\~\~*'
+ if b:fenced_block == 0
+ let b:fenced_block = 1
+ elseif b:fenced_block == 1
+ let b:fenced_block = 0
+ endif
+ endif
+ if l:line =~ '^#\+' || l:l1 =~ '^==\+\s*' || l:l1 =~ '^--\+\s*'
+ let b:is_header = 1
+ else
+ let b:is_header = 0
+ endif
+ if b:is_header == 1 && b:fenced_block == 0
+ " append line to location list
+ let b:item = {'lnum': i, 'text': l:line, 'valid': 1, 'bufnr': b:bufnr, 'col': 1}
+ let b:header_list = b:header_list + [b:item]
+ endif
+ endfor
+ if len(b:header_list) == 0
echom "Toc: No headers."
return
- endtry
+ endif
+ call setloclist(0, b:header_list)
if l:window_type ==# 'horizontal'
lopen
endif
endfor
let l:numSubstitutions = s:SetexToAtx(a:line1, a:line2)
+ let l:flags = (&gdefault ? '' : 'g')
for l:level in range(replaceLevels[0], replaceLevels[1], -l:levelDelta)
- execute 'silent! ' . a:line1 . ',' . (a:line2 - l:numSubstitutions) . 'substitute/' . s:levelRegexpDict[l:level] . '/' . repeat('#', l:level + l:levelDelta) . '/g'
+ execute 'silent! ' . a:line1 . ',' . (a:line2 - l:numSubstitutions) . 'substitute/' . s:levelRegexpDict[l:level] . '/' . repeat('#', l:level + l:levelDelta) . '/' . l:flags
endfor
endfunction
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 /|.
- s/[^|]//g
+ let l:flags = (&gdefault ? '' : 'g')
+ execute 's/[^|]//' . l:flags
Tabularize /|
- s/ /-/g
+ execute 's/ /-/' . l:flags
call setpos('.', l:pos)
endfunction