aboutsummaryrefslogtreecommitdiff
path: root/vim/autoload/ftplugin
diff options
context:
space:
mode:
Diffstat (limited to 'vim/autoload/ftplugin')
-rw-r--r--vim/autoload/ftplugin/markdown/autoformat.vim24
1 files changed, 24 insertions, 0 deletions
diff --git a/vim/autoload/ftplugin/markdown/autoformat.vim b/vim/autoload/ftplugin/markdown/autoformat.vim
index 1d01c58e..f416da77 100644
--- a/vim/autoload/ftplugin/markdown/autoformat.vim
+++ b/vim/autoload/ftplugin/markdown/autoformat.vim
@@ -13,6 +13,30 @@ function! ftplugin#markdown#autoformat#Line() abort
endif
endfunction
+" 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)
+function! ftplugin#markdown#autoformat#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
+
" Suspend auto-formatting when in a code block (four-space indent)
function! ftplugin#markdown#autoformat#Put(above) abort
let l:suspended = 0