From 81ff3c0f3ae44bb88a129b7395cb050290a37518 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Sun, 17 Jun 2018 00:19:45 +1200 Subject: Completely overhaul after/ftplugin files Should have done some of this in separate commits; oh well. * Rewrite headers for each ftplugin * Require Vim version >= 7.0, and thereby: * Switch back to location list * Don't check for b:undo_ftplugin existence, assume it * Save and restore compiler instead of internal options * Add bash, ksh, sh, and shellcheck compilers * Rename mail/format_flowed.vim to mail/flowed.vim * Rename sh/bash_han.vim to sh/han.vim --- vim/after/ftplugin/html/lint.vim | 52 +++++++++++----------- vim/after/ftplugin/html/tidy.vim | 37 +++++++++------- vim/after/ftplugin/html/url_link.vim | 37 +++++++++------- vim/after/ftplugin/mail/flowed.vim | 21 +++++++++ vim/after/ftplugin/mail/format_flowed.vim | 17 ------- vim/after/ftplugin/markdown/spell.vim | 26 +++++------ vim/after/ftplugin/perl/check.vim | 47 +++++++++++--------- vim/after/ftplugin/perl/lint.vim | 47 +++++++++++--------- vim/after/ftplugin/perl/tidy.vim | 32 ++++++------- vim/after/ftplugin/php/check.vim | 54 +++++++++++----------- vim/after/ftplugin/sh/bash_han.vim | 19 -------- vim/after/ftplugin/sh/check.vim | 74 ++++++++++++++----------------- vim/after/ftplugin/sh/han.vim | 26 +++++++++++ vim/after/ftplugin/sh/lint.vim | 64 +++++++++++--------------- vim/after/ftplugin/sh/posix.vim | 27 ----------- vim/after/ftplugin/text/spell.vim | 26 +++++------ vim/after/ftplugin/vim/lint.vim | 49 ++++++++++---------- vim/after/ftplugin/zsh/check.vim | 47 +++++++++++--------- vim/compiler/bash.vim | 17 +++++++ vim/compiler/ksh.vim | 17 +++++++ vim/compiler/sh.vim | 17 +++++++ vim/compiler/shellcheck.vim | 27 +++++++++++ 22 files changed, 424 insertions(+), 356 deletions(-) create mode 100644 vim/after/ftplugin/mail/flowed.vim delete mode 100644 vim/after/ftplugin/mail/format_flowed.vim delete mode 100644 vim/after/ftplugin/sh/bash_han.vim create mode 100644 vim/after/ftplugin/sh/han.vim delete mode 100644 vim/after/ftplugin/sh/posix.vim create mode 100644 vim/compiler/bash.vim create mode 100644 vim/compiler/ksh.vim create mode 100644 vim/compiler/sh.vim create mode 100644 vim/compiler/shellcheck.vim diff --git a/vim/after/ftplugin/html/lint.vim b/vim/after/ftplugin/html/lint.vim index 64df3447..a3776d60 100644 --- a/vim/after/ftplugin/html/lint.vim +++ b/vim/after/ftplugin/html/lint.vim @@ -1,30 +1,36 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled, or if the current filetype is -" actually markdown -if exists('b:did_ftplugin_html_lint') || &compatible +" html/lint.vim: Use tidy(1) to lint HTML documents for errors + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -if &filetype ==# 'markdown' + +" Don't load if already loaded +if exists('b:did_ftplugin_html_lint') finish endif -let b:did_ftplugin_html_lint = 1 -" Initialise undo variable if not already done -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_html_lint' +" Don't load if the primary filetype isn't HTML +if &filetype !=# 'html' + finish endif +" Flag as loaded +let b:did_ftplugin_html_lint = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_html_lint' + " Build function for linter function! s:HtmlLint() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - unlet! g:current_compiler + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif compiler tidy - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Stop here if the user doesn't want ftplugin mappings @@ -36,18 +42,14 @@ endif nnoremap \ HtmlLint \ :call HtmlLint() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap HtmlLint' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap HtmlLint' " If there isn't a key mapping already, use a default one if !hasmapto('HtmlLint') nmap \ l \ HtmlLint - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap l' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap l' endif diff --git a/vim/after/ftplugin/html/tidy.vim b/vim/after/ftplugin/html/tidy.vim index 3d14e79e..e0c43f01 100644 --- a/vim/after/ftplugin/html/tidy.vim +++ b/vim/after/ftplugin/html/tidy.vim @@ -1,18 +1,25 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled, or if the current filetype is -" actually markdown -if exists('b:did_ftplugin_html_tidy') || &compatible +" html/tidy.vim: Use tidy(1) to filter HTML documents + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -if &filetype ==# 'markdown' + +" Don't load if already loaded +if exists('b:did_ftplugin_html_tidy') finish endif -let b:did_ftplugin_html_tidy = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_html_tidy' + +" Don't load if the primary filetype isn't HTML +if &filetype !=# 'html' + finish endif +" Flag as loaded +let b:did_ftplugin_html_tidy = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_html_tidy' + " Stop here if the user doesn't want ftplugin mappings if exists('g:no_plugin_maps') || exists('g:no_html_maps') finish @@ -22,18 +29,14 @@ endif nnoremap \ HtmlTidy \ :%!tidy -quiet -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap HtmlTidy' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap HtmlTidy' " If there isn't a key mapping already, use a default one if !hasmapto('HtmlTidy') nmap \ t \ HtmlTidy - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap t' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap t' endif diff --git a/vim/after/ftplugin/html/url_link.vim b/vim/after/ftplugin/html/url_link.vim index c256b3b9..1cf57a7b 100644 --- a/vim/after/ftplugin/html/url_link.vim +++ b/vim/after/ftplugin/html/url_link.vim @@ -1,18 +1,25 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled, or if the current filetype is -" actually markdown -if exists('b:did_ftplugin_html_url_link') || &compatible +" html/url_link.vim: Make a URL into a link + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -if &filetype ==# 'markdown' + +" Don't load if already loaded +if exists('b:did_ftplugin_html_url_link') finish endif -let b:did_ftplugin_html_url_link = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_html_url_link' + +" Don't load if the primary filetype isn't HTML +if &filetype !=# 'html' + finish endif +" Flag as loaded +let b:did_ftplugin_html_url_link = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_html_url_link' + " Make a bare URL into a link to itself function! s:HtmlUrlLink() @@ -38,18 +45,14 @@ endif nnoremap \ HtmlUrlLink \ :call HtmlUrlLink() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap HtmlUrlLink' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap HtmlUrlLink' " If there isn't a key mapping already, use a default one if !hasmapto('HtmlUrlLink') nmap \ r \ HtmlUrlLink - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap r' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap r' endif diff --git a/vim/after/ftplugin/mail/flowed.vim b/vim/after/ftplugin/mail/flowed.vim new file mode 100644 index 00000000..78353360 --- /dev/null +++ b/vim/after/ftplugin/mail/flowed.vim @@ -0,0 +1,21 @@ +" mail/flowed.vim: Add 'w' flag to 'formatoptions' for mail + +" Don't load if running compatible or too old +if &compatible || v:version < 700 + finish +endif + +" Don't load if already loaded +if exists('b:did_ftplugin_mail_flowed') + finish +endif + +" Flag as loaded +let b:did_ftplugin_mail_flowed = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_mail_flowed' + +" Use trailing whitespace to denote continued paragraph +setlocal formatoptions+=w +let b:undo_ftplugin = b:undo_ftplugin + \ . '|setlocal formatoptions<' diff --git a/vim/after/ftplugin/mail/format_flowed.vim b/vim/after/ftplugin/mail/format_flowed.vim deleted file mode 100644 index 040a1a51..00000000 --- a/vim/after/ftplugin/mail/format_flowed.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_mail_format_flowed') || &compatible - finish -endif -let b:did_ftplugin_mail_format_flowed = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_mail_format_flowed' -endif - -" Use trailing whitespace to denote continued paragraph -setlocal formatoptions+=w -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|setlocal formatoptions<' -endif diff --git a/vim/after/ftplugin/markdown/spell.vim b/vim/after/ftplugin/markdown/spell.vim index 05fc7c00..873f9f93 100644 --- a/vim/after/ftplugin/markdown/spell.vim +++ b/vim/after/ftplugin/markdown/spell.vim @@ -1,21 +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 +" markdown/spell.vim: Turn on spell checking for Markdown files + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -if !has('spell') + +" Don't load if already loaded +if exists('b:did_ftplugin_markdown_spell') finish endif + +" Flag as loaded 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 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_markdown_spell' " Spellcheck documents by default setlocal spell -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|setlocal spell<' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|setlocal spell<' diff --git a/vim/after/ftplugin/perl/check.vim b/vim/after/ftplugin/perl/check.vim index e5eaf44a..e115b37f 100644 --- a/vim/after/ftplugin/perl/check.vim +++ b/vim/after/ftplugin/perl/check.vim @@ -1,24 +1,31 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_perl_check') || &compatible +" perl/check.vim: Use Perl binary to check for errors + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_perl_check = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_perl_check' + +" Don't load if already loaded +if exists('b:did_ftplugin_perl_check') + finish endif +" Flag as loaded +let b:did_ftplugin_perl_check = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_perl_check' + " Build function for checker function! s:PerlCheck() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - unlet! g:current_compiler + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif compiler perl - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Stop here if the user doesn't want ftplugin mappings @@ -30,18 +37,14 @@ endif nnoremap \ PerlCheck \ :call PerlCheck() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap PerlCheck' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap PerlCheck' " If there isn't a key mapping already, use a default one if !hasmapto('PerlCheck') nmap \ c \ PerlCheck - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap c' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap c' endif diff --git a/vim/after/ftplugin/perl/lint.vim b/vim/after/ftplugin/perl/lint.vim index 50770a13..3e73ac9a 100644 --- a/vim/after/ftplugin/perl/lint.vim +++ b/vim/after/ftplugin/perl/lint.vim @@ -1,24 +1,31 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_perl_lint') || &compatible +" perl/lint.vim: Use Perl::Critic to lint scripts + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_perl_lint = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_perl_lint' + +" Don't load if already loaded +if exists('b:did_ftplugin_perl_lint') + finish endif +" Flag as loaded +let b:did_ftplugin_perl_lint = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_perl_lint' + " Build function for linter function! s:PerlLint() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - unlet! g:current_compiler + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif compiler perlcritic - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Stop here if the user doesn't want ftplugin mappings @@ -30,18 +37,14 @@ endif nnoremap \ PerlLint \ :call PerlLint() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap PerlLint' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap PerlLint' " If there isn't a key mapping already, use a default one if !hasmapto('PerlLint') nmap \ l \ PerlLint - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap l' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap l' endif diff --git a/vim/after/ftplugin/perl/tidy.vim b/vim/after/ftplugin/perl/tidy.vim index bd3e73a1..01ca0210 100644 --- a/vim/after/ftplugin/perl/tidy.vim +++ b/vim/after/ftplugin/perl/tidy.vim @@ -1,14 +1,20 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_perl_tidy') || &compatible +" perl/tidy.vim: Use Perl::Tidy to format and filter scripts + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_perl_tidy = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_perl_tidy' + +" Don't load if already loaded +if exists('b:did_ftplugin_perl_tidy') + finish endif +" Flag as loaded +let b:did_ftplugin_perl_tidy = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_perl_tidy' + " Stop here if the user doesn't want ftplugin mappings if exists('g:no_plugin_maps') || exists('g:no_perl_maps') finish @@ -18,18 +24,14 @@ endif nnoremap \ PerlTidy \ :%!perltidy -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap PerlTidy' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap PerlTidy' " If there isn't a key mapping already, use a default one if !hasmapto('PerlTidy') nmap \ t \ PerlTidy - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap t' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap t' endif diff --git a/vim/after/ftplugin/php/check.vim b/vim/after/ftplugin/php/check.vim index 5f131d94..f211a642 100644 --- a/vim/after/ftplugin/php/check.vim +++ b/vim/after/ftplugin/php/check.vim @@ -1,32 +1,40 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_php_check') || &compatible +" php/check.vim: Use PHP binary to check scripts for errors + +" Don't load if running compatible or too old +if &compatible || v:version < 700 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' + +" Don't load if already loaded +if exists('b:did_ftplugin_php_check') + finish endif +" Flag as loaded +let b:did_ftplugin_php_check = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_php_check' + " Build function for checker function! s:PhpCheck() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - unlet! g:current_compiler + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif compiler php - " 7.4.191 is the earliest version with the :S file name modifier, which we - " really should use if we can + " The PHP compiler is unusual: it gets us to provide the filename argument + " ourselves. 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 + lmake! %:S else - make! % + lmake! % endif + lwindow - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Stop here if the user doesn't want ftplugin mappings @@ -38,18 +46,14 @@ endif nnoremap \ PhpCheck \ :call PhpCheck() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap PhpCheck' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap PhpCheck' " 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 + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap c' endif diff --git a/vim/after/ftplugin/sh/bash_han.vim b/vim/after/ftplugin/sh/bash_han.vim deleted file mode 100644 index a160165c..00000000 --- a/vim/after/ftplugin/sh/bash_han.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_sh_bash_han') || &compatible - finish -endif -let b:did_ftplugin_sh_bash_han = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_sh_bash_han' -endif - -" Use han(1df) as a man(1) wrapper for Bash files if available -if exists('b:is_bash') && executable('han') - setlocal keywordprg=han - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|setlocal keywordprg<' - endif -endif diff --git a/vim/after/ftplugin/sh/check.vim b/vim/after/ftplugin/sh/check.vim index dce6552c..e92409cf 100644 --- a/vim/after/ftplugin/sh/check.vim +++ b/vim/after/ftplugin/sh/check.vim @@ -1,42 +1,38 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_sh_check') || &compatible +" sh/check.vim: Use appropriate shell binary to check scripts for errors + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_sh_check = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_sh_check' -endif -" Choose checker based on shell family -if exists('b:is_bash') - let b:sh_check_makeprg = 'bash -n %:S' -elseif exists('b:is_kornshell') - let b:sh_check_makeprg = 'ksh -n %:S' -else - let b:sh_check_makeprg = 'sh -n %:S' -endif -let b:sh_check_errorformat = '%f: %l: %m' -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:sh_check_makeprg' - \ . '|unlet b:sh_check_errorformat' +" Don't load if already loaded +if exists('b:did_ftplugin_sh_check') + finish endif +" Flag as loaded +let b:did_ftplugin_sh_check = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_sh_check' + " Build function for checker -if !exists('*s:ShCheck') - function s:ShCheck() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - let &l:makeprg = b:sh_check_makeprg - let &l:errorformat = b:sh_check_errorformat - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow - endfunction -endif +function! s:ShCheck() + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif + if exists('b:is_bash') + compiler bash + elseif exists('b:is_kornshell') + compiler ksh + else + compiler sh + endif + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif +endfunction " Stop here if the user doesn't want ftplugin mappings if exists('g:no_plugin_maps') || exists('g:no_sh_maps') @@ -47,18 +43,14 @@ endif nnoremap \ ShCheck \ :call ShCheck() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap ShCheck' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap ShCheck' " If there isn't a key mapping already, use a default one if !hasmapto('ShCheck') nmap \ c \ ShCheck - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap c' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap c' endif diff --git a/vim/after/ftplugin/sh/han.vim b/vim/after/ftplugin/sh/han.vim new file mode 100644 index 00000000..3aacdb7e --- /dev/null +++ b/vim/after/ftplugin/sh/han.vim @@ -0,0 +1,26 @@ +" sh/han.vim: Use han(1df) as 'keywordprg' for Bash scripts + +" Don't load if running compatible or too old +if &compatible || v:version < 700 + finish +endif + +" Don't load if already loaded +if exists('b:did_ftplugin_sh_han') + finish +endif + +" Don't load if this isn't Bash or if han(1df) isn't available +if !exists('b:is_bash') || !executable('han') + finish +endif + +" Flag as loaded +let b:did_ftplugin_sh_han = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_sh_han' + +" Set 'keywordprg' to han(1df) +setlocal keywordprg=han +let b:undo_ftplugin = b:undo_ftplugin + \ . '|setlocal keywordprg<' diff --git a/vim/after/ftplugin/sh/lint.vim b/vim/after/ftplugin/sh/lint.vim index b89645f7..87f1c07e 100644 --- a/vim/after/ftplugin/sh/lint.vim +++ b/vim/after/ftplugin/sh/lint.vim @@ -1,39 +1,31 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_sh_lint') || &compatible +" sh/lint.vim: Use appropriate shell binary to lint scripts for errors + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_sh_lint = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_sh_lint' -endif -" Choose linter based on shell family -if exists('b:is_bash') - let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s bash %:S' -elseif exists('b:is_kornshell') - let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s ksh %:S' -else - let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s sh %:S' -endif -let b:sh_lint_errorformat = '%f:%l:%c: %m [SC%n]' -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:sh_lint_makeprg' - \ . '|unlet b:sh_lint_errorformat' +" Don't load if already loaded +if exists('b:did_ftplugin_sh_lint') + finish endif -" Build function for checker +" Flag as loaded +let b:did_ftplugin_sh_lint = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_sh_lint' + +" Build function for linter function! s:ShLint() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - let &l:makeprg = b:sh_lint_makeprg - let &l:errorformat = b:sh_lint_errorformat - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif + compiler shellcheck + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Stop here if the user doesn't want ftplugin mappings @@ -45,18 +37,14 @@ endif nnoremap \ ShLint \ :call ShLint() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap ShLint' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap ShLint' " If there isn't a key mapping already, use a default one if !hasmapto('ShLint') nmap \ l \ ShLint - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap l' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap l' endif diff --git a/vim/after/ftplugin/sh/posix.vim b/vim/after/ftplugin/sh/posix.vim deleted file mode 100644 index a1b2c7ff..00000000 --- a/vim/after/ftplugin/sh/posix.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_sh_posix') || &compatible - finish -endif -let b:did_ftplugin_sh_posix = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_sh_posix' -endif - -" -" If we have a #!/bin/sh shebang and filetype.vim determined we were neither -" POSIX nor Bash nor Korn shell, we'll guess POSIX, just because it's far more -" likely that's what I want to write than plain Bourne shell. -" -" You're supposed to be able to do this by setting g:is_posix, but if that's -" set, the syntax file ends up setting g:is_kornshell for you too, for reasons -" I don't really understand. This method works though, and is cleaner than -" the other workaround I had been trying. -" -if exists('b:is_sh') - unlet b:is_sh - if !exists('b:is_bash') && !exists('b:is_kornshell') - let b:is_posix = 1 - endif -endif diff --git a/vim/after/ftplugin/text/spell.vim b/vim/after/ftplugin/text/spell.vim index 73ca5486..a9f5422b 100644 --- a/vim/after/ftplugin/text/spell.vim +++ b/vim/after/ftplugin/text/spell.vim @@ -1,21 +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_text_spell') || &compatible +" text/spell.vim: Turn on spell checking for text files + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -if !has('spell') + +" Don't load if already loaded +if exists('b:did_ftplugin_text_spell') finish endif + +" Flag as loaded let b:did_ftplugin_text_spell = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_text_spell' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_text_spell' " Spellcheck documents by default setlocal spell -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|setlocal spell<' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|setlocal spell<' diff --git a/vim/after/ftplugin/vim/lint.vim b/vim/after/ftplugin/vim/lint.vim index ef04d852..1e4f7d39 100644 --- a/vim/after/ftplugin/vim/lint.vim +++ b/vim/after/ftplugin/vim/lint.vim @@ -1,24 +1,31 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_vim_lint') || &compatible +" vim/lint.vim: Use Vint to lint VimL scripts + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_vim_lint = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_vim_lint' + +" Don't load if already loaded +if exists('b:did_ftplugin_vim_lint') + finish endif -" Build function for checker +" Flag as loaded +let b:did_ftplugin_vim_lint = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_vim_lint' + +" Build function for linter function! s:VimLint() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - unlet! g:current_compiler + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif compiler vint - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Stop here if the user doesn't want ftplugin mappings @@ -30,18 +37,14 @@ endif nnoremap \ VimLint \ :call VimLint() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap VimLint' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap VimLint' " If there isn't a key mapping already, use a default one if !hasmapto('VimLint') nmap \ l \ VimLint - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap l' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap l' endif diff --git a/vim/after/ftplugin/zsh/check.vim b/vim/after/ftplugin/zsh/check.vim index c0c8a342..1d327a62 100644 --- a/vim/after/ftplugin/zsh/check.vim +++ b/vim/after/ftplugin/zsh/check.vim @@ -1,24 +1,31 @@ -" Only do this when not done yet for this buffer -" Also do nothing if 'compatible' enabled -if exists('b:did_ftplugin_zsh_check') || &compatible +" zsh/check.vim: Use Z shell binary to check for errors + +" Don't load if running compatible or too old +if &compatible || v:version < 700 finish endif -let b:did_ftplugin_zsh_check = 1 -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|unlet b:did_ftplugin_zsh_check' + +" Don't load if already loaded +if exists('b:did_ftplugin_zsh_check') + finish endif +" Flag as loaded +let b:did_ftplugin_zsh_check = 1 +let b:undo_ftplugin = b:undo_ftplugin + \ . '|unlet b:did_ftplugin_zsh_check' + " Build function for checker function! s:ZshCheck() - let l:save_makeprg = &l:makeprg - let l:save_errorformat = &l:errorformat - unlet! g:current_compiler + if exists('b:current_compiler') + let l:save_compiler = b:current_compiler + endif compiler zsh - make! - let &l:makeprg = l:save_makeprg - let &l:errorformat = l:save_errorformat - cwindow + lmake! + lwindow + if exists('l:save_compiler') + execute 'compiler ' . l:save_compiler + endif endfunction " Set up a mapping for the checker, if we're allowed @@ -30,18 +37,14 @@ endif nnoremap \ ZshCheck \ :call ZshCheck() -if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap ZshCheck' -endif +let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap ZshCheck' " If there isn't a key mapping already, use a default one if !hasmapto('ZshCheck') nmap \ c \ ZshCheck - if exists('b:undo_ftplugin') - let b:undo_ftplugin = b:undo_ftplugin - \ . '|nunmap c' - endif + let b:undo_ftplugin = b:undo_ftplugin + \ . '|nunmap c' endif diff --git a/vim/compiler/bash.vim b/vim/compiler/bash.vim new file mode 100644 index 00000000..70997f92 --- /dev/null +++ b/vim/compiler/bash.vim @@ -0,0 +1,17 @@ +if exists('g:current_compiler') + finish +endif +let g:current_compiler = 'bash' + +if exists(':CompilerSet') != 2 + command -nargs=* CompilerSet setlocal +endif + +" 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') + CompilerSet makeprg=bash\ -n\ %:S +else + CompilerSet makeprg=bash\ -n\ % +endif +CompilerSet errorformat=%f:\ line\ %l:\ %m diff --git a/vim/compiler/ksh.vim b/vim/compiler/ksh.vim new file mode 100644 index 00000000..1b31ffa7 --- /dev/null +++ b/vim/compiler/ksh.vim @@ -0,0 +1,17 @@ +if exists('g:current_compiler') + finish +endif +let g:current_compiler = 'ksh' + +if exists(':CompilerSet') != 2 + command -nargs=* CompilerSet setlocal +endif + +" 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') + CompilerSet makeprg=ksh\ -n\ %:S +else + CompilerSet makeprg=ksh\ -n\ % +endif +CompilerSet errorformat=%f:\ %l:\ %m diff --git a/vim/compiler/sh.vim b/vim/compiler/sh.vim new file mode 100644 index 00000000..ff5ed314 --- /dev/null +++ b/vim/compiler/sh.vim @@ -0,0 +1,17 @@ +if exists('g:current_compiler') + finish +endif +let g:current_compiler = 'sh' + +if exists(':CompilerSet') != 2 + command -nargs=* CompilerSet setlocal +endif + +" 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') + CompilerSet makeprg=sh\ -n\ %:S +else + CompilerSet makeprg=sh\ -n\ % +endif +CompilerSet errorformat=%f:\ %l:\ %m diff --git a/vim/compiler/shellcheck.vim b/vim/compiler/shellcheck.vim new file mode 100644 index 00000000..6d6498da --- /dev/null +++ b/vim/compiler/shellcheck.vim @@ -0,0 +1,27 @@ +if exists('g:current_compiler') + finish +endif +let g:current_compiler = 'shellcheck' + +if exists(':CompilerSet') != 2 + command -nargs=* CompilerSet setlocal +endif + +" Build :CompilerSet command based on buffer shell type +let s:set = 'CompilerSet makeprg=shellcheck\ -e\ SC1090\ -f\ gcc' +if exists('b:is_bash') + let s:set = s:set . '\ -s\ bash' +elseif exists('b:is_kornshell') + let s:set = s:set . '\ -s\ ksh' +else + let s:set = s:set . '\ -s\ sh' +endif + +" 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') + execute s:set . '\ %:S' +else + execute s:set . '\ %' +endif +CompilerSet errorformat=%f:%l:%c:\ %m\ [SC%n] -- cgit v1.2.3