gpt4 book ai didi

shell - Vim:使用外部命令和处理错误

转载 作者:行者123 更新时间:2023-12-04 15:25:46 25 4
gpt4 key购买 nike

我正在尝试使用外部命令来处理 Vim 中一系列行的某些格式,但似乎无法找到处理来自外部命令的错误的方法。

这些错误通常是在 shell 返回 0 以外的值并提示 Vim 显示以下内容时出现的:

shell returned 1

除此之外,它还用错误的实际消息替换了我想格式化的行。如果我这样做,也会发生这种情况:
:set equalprg=myformatter\ --format-flag\

如何安全地捕获外部命令的错误并显示任何错误消息?

注意:这不是关于如何使用外部命令在 Vim 中格式化某些文本的问题,而是关于如何捕获错误并返回消息的问题。

最佳答案

可能有更好的方法来做到这一点,但我得到了这个草稿(参见下面的 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

关于shell - Vim:使用外部命令和处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9466795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com