2

我正在尝试从 Vim 中的 make 获取“0 成功,如果错误则非零”返回码。具体来说,我在 Ubuntu 上并且使用v:shell_error不起作用。

挖了一圈看了看这个问题,好像是因为我的shellpipe设置,也就是

shellpipe=2>&1| tee

tee管道将 make 输出返回到 vim 。shell 显然将错误代码从 tee 返回到 vim 而不是从 make 返回。我如何获得make的错误代码?

4

2 回答 2

4

您可以尝试为此制作自定义功能。例如,使用:call system("make > make.out")run make 将输出重定向到文件中。之后使用 . 加载错误文件:cf make.out。不过,我自己从未尝试过。

最后,make也可以通过在文件系统中测试结果是否存在来简单地检查结果:

:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif

(这里的 '|' 符号是 vim 的命令分隔符。)将其分配给键盘快捷键将无需键入。

PS我通常尝试让我的程序不产生警告,所以我从来没有真正遇到过这个问题。顺便说一句,导致另一种可能的解决方案是:grep -v tabooword通过覆盖'makeprg'. 帮助中实际描述的内容::h 'makeprg'.

PPS我开始使用 VIM...前提是您还使用 bash 作为 shell。您是否尝试将出口 ${PIPESTATUS[0]} 添加到 shellpipe?例如:

:set shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]}

刚刚在 Debian 上进行了测试,它对我有用。:h 'shellpipe'更多。

于 2010-06-20T00:35:21.113 回答
1

我目前唯一能想到的就是为 make 和 tee 创建两个包装脚本。我相信有一个更简单的方法,但现在你可以试试这个:

创建一个 make 包装脚本:

#!/bin/bash

make $@
echo $? > ~/exit_code_cache

创建一个 tee 包装脚本:

#!/bin/bash

tee $@
return `cat ~/exit_code_cache` # (or do something else with the exit code)

使用新品牌:set makeprg=mymake并设置您自己shellpipe的使用您的 T 恤包装 ( shellpipe=2>&1 | mytee)。

它没有经过测试,但这个想法应该很清楚。希望能帮助到你。

于 2010-06-19T23:01:43.653 回答