Возможно, есть лучший способ сделать это, но я набросал этот черновик (см. Далее по адресу equalprg).В основном он переопределяет gq
, перезаписывая его, чтобы распечатать ошибку, а затем отменить ее.
set formatprg=~/test.sh
nnoremap gq :setl opfunc=FormatPrg<cr>g@
fun! FormatPrg(...)
silent exe "'[,']!".&formatprg
if v:shell_error == 1
let format_error = join(getline(line("'["), line("']")), "\n")
undo
echo format_error
end
endfun
Это то, что в ~/test.sh
:
echo "error!!
alskdjf alskdf
alskdj flaskdjf" 1>&2
exit 1
Редактировать:
Я только что понял, что вообще не ответил на твой вопрос, ха-ха.Мое решение для equalprg
еще менее изящно, но оно может удовлетворить ваши потребности.Чтобы использовать это , вы должны установить equalprg .Либо закомментируйте строку nnoremap, либо set indentexpr=EqualPrg()
, если хотите переключаться между внешним инструментом и внутренним форматером отступов.
set equalprg=~/test.sh
nnoremap = :setl opfunc=EqualPrg<cr>g@
fun! EqualPrg(...)
if &equalprg != ""
silent exe "'[,']!".&equalprg
else
set indentexpr=
exe "norm! `[=`]"
set indentexpr=EqualPrg()
endif
if v:shell_error == 1
let format_error = join(getline(line("'["), line("']")), "\n")
undo
echo format_error
endif
endfun