diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-11-19 17:32:37 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-11-19 17:32:37 +1300 |
commit | fdd2222ddf85113cc9820c1f4b1b07efac4703aa (patch) | |
tree | b056f90d95634d38be7af4619787e66d5f27f339 /vim | |
parent | Remove 'shellpipe' setting (diff) | |
download | dotfiles-fdd2222ddf85113cc9820c1f4b1b07efac4703aa.tar.gz dotfiles-fdd2222ddf85113cc9820c1f4b1b07efac4703aa.zip |
Adapt sh check/lint to use :lmake
This opens the error list in the location list for the error list if
there were any. It seems to work well.
Diffstat (limited to 'vim')
-rw-r--r-- | vim/after/ftplugin/sh/check.vim | 26 | ||||
-rw-r--r-- | vim/after/ftplugin/sh/lint.vim | 26 |
2 files changed, 42 insertions, 10 deletions
diff --git a/vim/after/ftplugin/sh/check.vim b/vim/after/ftplugin/sh/check.vim index 334ec1db..72ebd613 100644 --- a/vim/after/ftplugin/sh/check.vim +++ b/vim/after/ftplugin/sh/check.vim @@ -11,15 +11,31 @@ endif " Choose checker based on shell family if exists('b:is_bash') - let b:sh_check = 'write !bash -n' + let b:sh_check_makeprg = 'bash -n %:S' elseif exists('b:is_kornshell') - let b:sh_check = 'write !ksh -n' + let b:sh_check_makeprg = 'ksh -n %:S' else - let b:sh_check = 'write !sh -n' + 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' + \ . '|unlet b:sh_check_makeprg' + \ . '|unlet b:sh_check_errorformat' +endif + +" 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 + lmake! + let &l:makeprg = l:save_makeprg + let &l:errorformat = l:save_errorformat + lwindow + endfunction endif " Set up a mapping for the checker, if we're allowed @@ -28,7 +44,7 @@ if !exists('g:no_plugin_maps') && !exists('g:no_sh_maps') " Define a mapping target nnoremap <buffer> <silent> <unique> \ <Plug>ShCheck - \ :<C-U>execute b:sh_check<CR> + \ :<C-U>call <SID>ShCheck()<CR> if exists('b:undo_ftplugin') let b:undo_ftplugin = b:undo_ftplugin \ . '|nunmap <buffer> <Plug>ShCheck' diff --git a/vim/after/ftplugin/sh/lint.vim b/vim/after/ftplugin/sh/lint.vim index 8745a31e..2381e6e2 100644 --- a/vim/after/ftplugin/sh/lint.vim +++ b/vim/after/ftplugin/sh/lint.vim @@ -11,15 +11,31 @@ endif " Choose linter based on shell family if exists('b:is_bash') - let b:sh_lint = 'write !shellcheck -e SC1090 -s bash -' + let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s bash %:S' elseif exists('b:is_kornshell') - let b:sh_lint = 'write !shellcheck -e SC1090 -s ksh -' + let b:sh_lint_makeprg = 'shellcheck -e SC1090 -f gcc -s ksh %:S' else - let b:sh_lint = 'write !shellcheck -e SC1090 -s sh -' + 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' + \ . '|unlet b:sh_lint_makeprg' + \ . '|unlet b:sh_lint_errorformat' +endif + +" Build function for checker +if !exists('*s:ShLint') + 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 + lmake! + let &l:makeprg = l:save_makeprg + let &l:errorformat = l:save_errorformat + lwindow + endfunction endif " Set up a mapping for the linter, if we're allowed @@ -28,7 +44,7 @@ if !exists('g:no_plugin_maps') && !exists('g:no_sh_maps') " Define a mapping target nnoremap <buffer> <silent> <unique> \ <Plug>ShLint - \ :<C-U>execute b:sh_lint<CR> + \ :<C-U>call <SID>ShLint()<CR> if exists('b:undo_ftplugin') let b:undo_ftplugin = b:undo_ftplugin \ . '|nunmap <buffer> <Plug>ShLint' |