diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2018-06-04 19:11:45 +1200 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2018-06-04 19:11:45 +1200 |
commit | 3c7a5d27d22461144547fee3fb0d5ae02af5e8e9 (patch) | |
tree | 18a11ced1449e92152215b189115cfb413b8aef1 /vim/after | |
parent | Don't load my HTML ftplugins for Markdown types (diff) | |
download | dotfiles-3c7a5d27d22461144547fee3fb0d5ae02af5e8e9.tar.gz dotfiles-3c7a5d27d22461144547fee3fb0d5ae02af5e8e9.zip |
Move markdown_autoformat.vim funcs back to local
No advantage to making them autoload
Diffstat (limited to 'vim/after')
-rw-r--r-- | vim/after/ftplugin/markdown/autoformat.vim | 68 |
1 files changed, 64 insertions, 4 deletions
diff --git a/vim/after/ftplugin/markdown/autoformat.vim b/vim/after/ftplugin/markdown/autoformat.vim index 2bb4f87c..7edcfbf6 100644 --- a/vim/after/ftplugin/markdown/autoformat.vim +++ b/vim/after/ftplugin/markdown/autoformat.vim @@ -13,9 +13,69 @@ if exists('b:undo_ftplugin') \ . '|unlet b:did_ftplugin_markdown_autoformat' endif +" Turn on autoformatting if less than 5% of the buffer's lines meet all three +" of these conditions: +" * Longer than 'textwidth' +" * Contains at least one space (not an unsplittable line) +" * Not a code block (indented with at least four spaces) +if !has('*s:Load') + function! s:Load() abort + let l:width = &textwidth ? &textwidth : 79 + let l:count = 0 + let l:total = line('$') + for l:li in range(1, l:total) + let l:line = getline(l:li) + if strlen(l:line) > l:width + \ && stridx(l:line, ' ') > -1 + \ && l:line !~# '\m^ ' + let l:count = l:count + 1 + endif + endfor + if l:count * 100 / l:total < 5 + setlocal formatoptions+=a + else + setlocal formatoptions-=a + endif + endfunction +endif + +" Suspend auto-format when pasting anything with a linebreak +if !has('*s:Line') + function! s:Line() abort + if getline('.') =~# '\m^ ' + if &formatoptions =~# '\ma' + setlocal formatoptions-=a + let b:markdown_autoformat_suspended = 1 + endif + elseif exists('b:markdown_autoformat_suspended') + setlocal formatoptions+=a + unlet b:markdown_autoformat_suspended + endif + endfunction +endif + +" Suspend auto-formatting when in a code block (four-space indent) +if !has('*s:Put') + function! s:Put(above) abort + let l:suspended = 0 + if &formatoptions =~# '\ma' && @" =~# '\m\n' + setlocal formatoptions-=a + let l:suspended = 1 + endif + if a:above + normal! P + else + normal! p + endif + if l:suspended + setlocal formatoptions+=a + endif + endfunction +endif + " Turn on autoformatting if the buffer has no code-block lines with spaces " that is longer than 'textwidth' -call ftplugin#markdown#autoformat#Load() +call s:Load() " Group autocommands augroup ftplugin_markdown_autoformat @@ -24,17 +84,17 @@ augroup ftplugin_markdown_autoformat " Suspend auto-formatting when in a code block (four-space indent) autocmd BufWinEnter,CursorMoved,CursorMovedI,WinEnter \ <buffer> - \ call ftplugin#markdown#autoformat#Line() + \ call s:Line() augroup END " Suspend auto-format when pasting anything with a linebreak nnoremap <buffer> <silent> \ p - \ :<C-u>call ftplugin#markdown#autoformat#PutBelow()<CR> + \ :<C-u>call <SID>Put(0)<CR> nnoremap <buffer> <silent> \ P - \ :<C-u>call ftplugin#markdown#autoformat#PutAbove()<CR> + \ :<C-u>call <SID>Put(1)<CR> " Undo all the above if exists('b:undo_ftplugin') |