aboutsummaryrefslogtreecommitdiff
path: root/vim/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'vim/autoload')
-rw-r--r--vim/autoload/ftplugin/markdown/autoformat.vim39
1 files changed, 39 insertions, 0 deletions
diff --git a/vim/autoload/ftplugin/markdown/autoformat.vim b/vim/autoload/ftplugin/markdown/autoformat.vim
new file mode 100644
index 00000000..1d01c58e
--- /dev/null
+++ b/vim/autoload/ftplugin/markdown/autoformat.vim
@@ -0,0 +1,39 @@
+" Autoload functions for after/ftplugin/markdown/autoformat.vim
+
+" Suspend auto-format when pasting anything with a linebreak
+function! ftplugin#markdown#autoformat#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
+
+" Suspend auto-formatting when in a code block (four-space indent)
+function! ftplugin#markdown#autoformat#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
+
+" Wrapper functions for #Put() above/below
+function! ftplugin#markdown#autoformat#PutAbove() abort
+ call ftplugin#markdown#autoformat#Put(1)
+endfunction
+function! ftplugin#markdown#autoformat#PutBelow() abort
+ call ftplugin#markdown#autoformat#Put(0)
+endfunction