" Markdown Header Mappings - Easy setting of markdown headers "------------------------------------------------------------ function! s:SmartLevelFourHeader() call s:DeleteExistingUnderline() call s:DeleteExistingLeadingHeaderMarks() s/^/#### / silent! call repeat#set("\<Plug>SmartLevelFourHeader") endfunction function! s:SmartLevelThreeHeader() call s:DeleteExistingUnderline() call s:DeleteExistingLeadingHeaderMarks() s/^/### / silent! call repeat#set("\<Plug>SmartLevelThreeHeader") endfunction function! s:OnLastLineOfFile() return line('.') == line('$') endfunction function! s:DeleteExistingLeadingHeaderMarks() silent! s/^#\{1,6} // endfunction function! s:DeleteExistingUnderline() if !s:OnLastLineOfFile() let saved_cursor = getpos(".") +1g/\v^[-=]+$/d call setpos('.', saved_cursor) endif endfunction function! s:SmartUnderline(char) call s:DeleteExistingUnderline() call s:DeleteExistingLeadingHeaderMarks() let underline = repeat(a:char, len(getline('.'))) call append(line('.'), underline) if a:char == '=' silent! call repeat#set("\<Plug>UnderlineH1", v:count) else silent! call repeat#set("\<Plug>UnderlineH2", v:count) end endfunction nnoremap <silent> <Plug>UnderlineH1 :call <sid>SmartUnderline('=')<cr> nnoremap <silent> <Plug>UnderlineH2 :call <sid>SmartUnderline('-')<cr> nnoremap <silent> <Plug>SmartLevelThreeHeader :call <sid>SmartLevelThreeHeader()<cr> nnoremap <silent> <Plug>SmartLevelFourHeader :call <sid>SmartLevelFourHeader()<cr> nmap <leader>u1 <Plug>UnderlineH1 nmap <leader>u2 <Plug>UnderlineH2 nmap <leader>u3 <Plug>SmartLevelThreeHeader nmap <leader>u4 <Plug>SmartLevelFourHeader " vim:ft=vim