aboutsummaryrefslogtreecommitdiff
path: root/vim/ftplugin
diff options
context:
space:
mode:
Diffstat (limited to 'vim/ftplugin')
-rw-r--r--vim/ftplugin/markdown/autoformat.vim96
-rw-r--r--vim/ftplugin/markdown/spell.vim21
-rw-r--r--vim/ftplugin/php/check.vim57
3 files changed, 174 insertions, 0 deletions
diff --git a/vim/ftplugin/markdown/autoformat.vim b/vim/ftplugin/markdown/autoformat.vim
new file mode 100644
index 00000000..3f620691
--- /dev/null
+++ b/vim/ftplugin/markdown/autoformat.vim
@@ -0,0 +1,96 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled, or if no autocmd feature, or if Vim
+" is too old to support the needed autocmd events
+if exists('b:did_ftplugin_markdown_autoformat') || &compatible
+ finish
+endif
+if !has('autocmd') || v:version < 700
+ finish
+endif
+let b:did_ftplugin_markdown_autoformat = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = 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
+call s:Load()
+
+" Suspend auto-formatting when in a code block (four-space indent)
+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
+augroup ftplugin_markdown_autoformat
+ autocmd!
+ autocmd BufWinEnter,CursorMoved,CursorMovedI,WinEnter
+ \ <buffer>
+ \ call s:Line()
+augroup END
+
+" Suspend auto-format when pasting anything with a linebreak
+if !has('*s:Put')
+ function! s:Put(above) abort
+ let l:suspended = 0
+ if &formatoptions =~# '\ma' && getreg() =~# '\m\n'
+ setlocal formatoptions-=a
+ let l:suspended = 1
+ endif
+ if a:above
+ execute 'normal! "'.v:register.v:count1.'P'
+ else
+ execute 'normal! "'.v:register.v:count1.'p'
+ endif
+ if l:suspended
+ setlocal formatoptions+=a
+ endif
+ endfunction
+endif
+nnoremap <buffer> <silent>
+ \ p
+ \ :<C-u>call <SID>Put(0)<CR>
+nnoremap <buffer> <silent>
+ \ P
+ \ :<C-u>call <SID>Put(1)<CR>
+
+" Undo all the above
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|setlocal formatoptions<'
+ \ . '|augroup ftplugin_markdown_autoformat'
+ \ . '|autocmd! * <buffer>'
+ \ . '|augroup END'
+endif
diff --git a/vim/ftplugin/markdown/spell.vim b/vim/ftplugin/markdown/spell.vim
new file mode 100644
index 00000000..05fc7c00
--- /dev/null
+++ b/vim/ftplugin/markdown/spell.vim
@@ -0,0 +1,21 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled, or if the 'spell' feature isn't
+" available
+if exists('b:did_ftplugin_markdown_spell') || &compatible
+ finish
+endif
+if !has('spell')
+ finish
+endif
+let b:did_ftplugin_markdown_spell = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_markdown_spell'
+endif
+
+" Spellcheck documents by default
+setlocal spell
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|setlocal spell<'
+endif
diff --git a/vim/ftplugin/php/check.vim b/vim/ftplugin/php/check.vim
new file mode 100644
index 00000000..33077a72
--- /dev/null
+++ b/vim/ftplugin/php/check.vim
@@ -0,0 +1,57 @@
+" Only do this when not done yet for this buffer
+" Also do nothing if 'compatible' enabled
+if exists('b:did_ftplugin_php_check') || &compatible
+ finish
+endif
+let b:did_ftplugin_php_check = 1
+if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|unlet b:did_ftplugin_php_check'
+endif
+
+" Build function for checker
+if !exists('*s:PhpCheck')
+ function s:PhpCheck()
+ let l:save_makeprg = &l:makeprg
+ let l:save_errorformat = &l:errorformat
+ unlet! g:current_compiler
+ compiler php
+
+ " 7.4.191 is the earliest version with the :S file name modifier, which we
+ " really should use if we can
+ if v:version >= 704 || v:version == 704 && has('patch191')
+ make! %:S
+ else
+ make! %
+ endif
+
+ let &l:makeprg = l:save_makeprg
+ let &l:errorformat = l:save_errorformat
+ cwindow
+ endfunction
+endif
+
+" Set up a mapping for the checker, if we're allowed
+if !exists('g:no_plugin_maps') && !exists('g:no_php_maps')
+
+ " Define a mapping target
+ nnoremap <buffer> <silent> <unique>
+ \ <Plug>PhpCheck
+ \ :<C-U>call <SID>PhpCheck()<CR>
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <Plug>PhpCheck'
+ endif
+
+ " If there isn't a key mapping already, use a default one
+ if !hasmapto('<Plug>PhpCheck')
+ nmap <buffer> <unique>
+ \ <LocalLeader>c
+ \ <Plug>PhpCheck
+ if exists('b:undo_ftplugin')
+ let b:undo_ftplugin = b:undo_ftplugin
+ \ . '|nunmap <buffer> <LocalLeader>c'
+ endif
+ endif
+
+endif