From aa288d9289bc57e44cbb1f50a74c38de63d639ad Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Tue, 5 Jun 2018 13:09:23 +1200 Subject: Restore ftplugin extras to vim/after dir This reverts commit a14bc50. Changed my mind; decided it's tidier this way. --- vim/after/ftplugin/markdown/autoformat.vim | 108 +++++++++++++++++++++++++++++ vim/after/ftplugin/markdown/spell.vim | 21 ++++++ vim/after/ftplugin/php/check.vim | 57 +++++++++++++++ 3 files changed, 186 insertions(+) create mode 100644 vim/after/ftplugin/markdown/autoformat.vim create mode 100644 vim/after/ftplugin/markdown/spell.vim create mode 100644 vim/after/ftplugin/php/check.vim (limited to 'vim/after/ftplugin') 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 +" 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 + \ + \ 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 + \ p + \ :call Put('p') + nnoremap + \ P + \ :call Put('P') +endif + +" Undo all the above +if exists('b:undo_ftplugin') + let b:undo_ftplugin = b:undo_ftplugin + \ . '|setlocal formatoptions<' + \ . '|augroup ftplugin_markdown_autoformat' + \ . '|autocmd! * ' + \ . '|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 + \ PhpCheck + \ :call PhpCheck() + if exists('b:undo_ftplugin') + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap PhpCheck' + endif + + " If there isn't a key mapping already, use a default one + if !hasmapto('PhpCheck') + nmap + \ c + \ PhpCheck + if exists('b:undo_ftplugin') + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap c' + endif + endif + +endif -- cgit v1.2.3