aboutsummaryrefslogtreecommitdiff
path: root/vim/ftplugin
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2018-06-04 22:35:49 +1200
committerTom Ryder <tom@sanctum.geek.nz>2018-06-04 22:41:17 +1200
commita14bc50707592944bf6e327c912bb197de98ec00 (patch)
treef87b3a7c5bfaa116e846c227a8de137c9a08439d /vim/ftplugin
parent814bb33ccdd984feb5766db401cc70f7452422c8 (diff)
downloaddotfiles-a14bc50707592944bf6e327c912bb197de98ec00.tar.gz
dotfiles-a14bc50707592944bf6e327c912bb197de98ec00.zip
Move Markdown and PHP ftplugins from after dir
Because we use our own private copies of the primary filetype plugins, they'll get loaded in the correct order from here. Also adjust Makefile to accommodate the extra level.
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