aboutsummaryrefslogtreecommitdiff
path: root/vim/after/ftplugin
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2018-06-05 13:09:23 +1200
committerTom Ryder <tom@sanctum.geek.nz>2018-06-05 13:09:23 +1200
commitaa288d9289bc57e44cbb1f50a74c38de63d639ad (patch)
treecf46ba4690f31f591e796ba0fb7a1e233a28b672 /vim/after/ftplugin
parentAdd ftplugin infrastructure and comments (diff)
downloaddotfiles-aa288d9289bc57e44cbb1f50a74c38de63d639ad.tar.gz
dotfiles-aa288d9289bc57e44cbb1f50a74c38de63d639ad.zip
Restore ftplugin extras to vim/after dir
This reverts commit a14bc50. Changed my mind; decided it's tidier this way.
Diffstat (limited to 'vim/after/ftplugin')
-rw-r--r--vim/after/ftplugin/markdown/autoformat.vim108
-rw-r--r--vim/after/ftplugin/markdown/spell.vim21
-rw-r--r--vim/after/ftplugin/php/check.vim57
3 files changed, 186 insertions, 0 deletions
diff --git a/vim/after/ftplugin/markdown/autoformat.vim b/vim/after/ftplugin/markdown/autoformat.vim
new file mode 100644
index 00000000..aa805267
--- /dev/null
+++ b/vim/after/ftplugin/markdown/autoformat.vim
@@ -0,0 +1,108 @@
+"
+" markdown/autoformat.vim: Refine control over the 'formatoptions' flag 'a'
+" for automatic formatting when editing Markdown documents:
+"
+" - Turn it on automatically on load if the buffer looks wrapped
+" - Suspend it if editing a line in a code block (indented by four spaces)
+" - Suspend it if pasting something with a linebreak
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" License: Same as Vim itself
+"
+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 !exists('*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 += 1
+ endif
+ endfor
+ if l:count * 100 / l:total < 5
+ setlocal formatoptions+=a
+ else
+ setlocal formatoptions-=a
+ endif
+ endfunction
+endif
+if !exists('g:markdown_autoformat_load') || g:markdown_autoformat_load
+ call s:Load()
+endif
+
+" Suspend auto-formatting when in a code block (four-space indent)
+if !exists('*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
+if !exists('g:markdown_autoformat_line') || g:markdown_autoformat_line
+ augroup ftplugin_markdown_autoformat
+ autocmd!
+ autocmd BufWinEnter,CursorMoved,CursorMovedI,WinEnter
+ \ <buffer>
+ \ call s:Line()
+ augroup END
+endif
+
+" Suspend auto-format when pasting anything with a linebreak
+if !exists('*s:Put')
+ function! s:Put(key) abort
+ let l:suspended = 0
+ if &formatoptions =~# '\ma' && getreg() =~# '\m\n'
+ setlocal formatoptions-=a
+ let l:suspended = 1
+ endif
+ execute 'normal! "'.v:register.v:count1.a:key
+ if l:suspended
+ setlocal formatoptions+=a
+ endif
+ endfunction
+endif
+if !exists('g:markdown_autoformat_put') || g:markdown_autoformat_put
+ nnoremap <buffer> <silent>
+ \ p
+ \ :<C-u>call <SID>Put('p')<CR>
+ nnoremap <buffer> <silent>
+ \ P
+ \ :<C-u>call <SID>Put('P')<CR>
+endif
+
+" 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/after/ftplugin/markdown/spell.vim b/vim/after/ftplugin/markdown/spell.vim
new file mode 100644
index 00000000..05fc7c00
--- /dev/null
+++ b/vim/after/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/after/ftplugin/php/check.vim b/vim/after/ftplugin/php/check.vim
new file mode 100644
index 00000000..33077a72
--- /dev/null
+++ b/vim/after/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